Пример #1
0
exports["test Show Hide Panel"] = function(assert, done) {
  const { Panel } = require('sdk/panel');
  let { getActiveView } = require('sdk/view/core');

  let panel = Panel({
    contentScript: "self.postMessage('')",
    contentScriptWhen: "end",
    contentURL: "data:text/html;charset=utf-8,",
    onMessage: function (message) {
      panel.show();
    },
    onShow: function () {
      assert.pass("The panel was shown.");
      assert.equal(this, panel, "The 'this' object is the panel.");
      assert.equal(this.isShowing, true, "panel.isShowing == true.");
      panel.hide();
    },
    onHide: function () {
      assert.pass("The panel was hidden.");
      assert.equal(this, panel, "The 'this' object is the panel.");
      assert.equal(this.isShowing, false, "panel.isShowing == false.");
      panel.destroy();
      done();
    }
  });
  getActiveView(panel);
};
Пример #2
0
  function onFocus() {
    browserWindow.removeEventListener("focus", onFocus, true);

    let panel = Panel({
      contentScript: "self.postMessage('')",
      contentScriptWhen: "end",
      contentURL: "data:text/html;charset=utf-8,",
      height: 10,
      width: 10,
      onMessage: function (message) {
        // Make sure that attempting to resize a panel while it isn't
        // visible doesn't cause an error.
        panel.resize(1, 1);

        panel.show();
      },
      onShow: function () {
        panel.resize(100,100);
        panel.hide();
      },
      onHide: function () {
        assert.ok((panel.width == 100) && (panel.height == 100),
          "The panel was resized.");
        if (activeWindow)
          activeWindow.focus();
        done();
      }
    });
    getActiveView(panel);
  }
Пример #3
0
exports["test Change Content URL"] = function(assert, done) {
  const { Panel } = require('sdk/panel');
  const { getActiveView } = require("sdk/view/core");

  let panel = Panel({
    contentURL: "about:blank",
    contentScript: "self.port.emit('ready', document.location.href);"
  });

  getActiveView(panel);

  let count = 0;
  panel.port.on("ready", function (location) {
    count++;
    if (count == 1) {
      assert.equal(location, "about:blank");
      assert.equal(panel.contentURL, "about:blank");
      panel.contentURL = "about:buildconfig";
    }
    else {
      assert.equal(location, "about:buildconfig");
      assert.equal(panel.contentURL, "about:buildconfig");
      panel.destroy();
      done();
    }
  });
};
Пример #4
0
exports.testGetActiveViewAndDestroy = function(assert) {
  let page = Page({
    contentURL: "data:text/html;charset=utf-8,<title>test</title>"
  });
  let frame = getActiveView(page);
  assert.ok(frame.parentNode, "there is a parent node");
  page.destroy();
  assert.ok(!frame.parentNode, "there is not a parent node");
}
Пример #5
0
 panel.once('show', _ => {
   let window = getContentFrame(getActiveView(panel)).contentWindow;
   addHistory({
     uri: newURI(url),
     title: window.document.title,
     visits: [{
       visitDate: Date.now() * 1000,
       transitionType: Ci.nsINavHistoryService.TRANSITION_LINK
     }]
   });
 });
Пример #6
0
function openPanel(url, w, h) {
    var myPanel = panel.Panel({
        width: w,
        height: h,
        contentURL: 'about:blank',
        onHide: function () {
            myPanel.destroy();
        }
    });
    if (privateBrowsing.isPrivate(browserWindows.activeWindow)) {
        var view = core.getActiveView(myPanel);
        view.setAttribute("disablehistory", true);
    }
    myPanel.show();
    myPanel.contentURL = url;
}
Пример #7
0
exports["test Panel Emit Early"] = function(assert, done) {
  const { Panel } = require('sdk/panel');
  const { getActiveView } = require("sdk/view/core");

  let panel = Panel({
    contentURL: "about:buildconfig",
    contentScript: "self.port.on('addon-to-content', " +
                   "             () => self.port.emit('received'));",
  });
  panel.port.on("received", function () {
    assert.pass("The panel posted a message early and received a response.");
    panel.destroy();
    done();
  });
  panel.port.emit("addon-to-content");
  getActiveView(panel);
};
Пример #8
0
exports.testAllowScript = function(assert, done) {
  let page = Page({
    onMessage: function(message) {
      assert.ok(message, "Script runs when allowed to do so.");
      page.destroy();
      done();
    },
    allow: { script: true },
    contentURL: "data:text/html;charset=utf-8,<script>document.documentElement.setAttribute('foo', 3);</script>",
    contentScript: "self.postMessage(document.documentElement.hasAttribute('foo') && " +
                   "                 document.documentElement.getAttribute('foo') == 3)",
    contentScriptWhen: "ready"
  });

  let frame = getActiveView(page);
  assert.equal(getDocShell(frame).allowJavascript, true, "allowJavascript is true");
}
Пример #9
0
exports["test watch event name"] = function(assert, done) {
  const { Panel } = require('sdk/panel');
  let { getActiveView } = require('sdk/view/core');

  let html = "<html><head><style>body {color: yellow}</style></head>" +
             "<body><p>Foo</p></body></html>";

  let panel = Panel({
    contentURL: "data:text/html;charset=utf-8," + encodeURI(html),
    contentScript: "self.port.emit('watch', 'test');"
  });
  panel.port.on("watch", function (msg) {
    assert.equal(msg, "test", 'watch event name works');
    panel.destroy();
    done();
  });
  getActiveView(panel);
}
Пример #10
0
exports["test ContentScriptOptions Option"] = function(assert, done) {
  let loader = Loader(module);
  let panel = loader.require("sdk/panel").Panel({
      contentScript: "self.postMessage( [typeof self.options.d, self.options] );",
      contentScriptWhen: "end",
      contentScriptOptions: {a: true, b: [1,2,3], c: "string", d: function(){ return 'test'}},
      contentURL: "data:text/html;charset=utf-8,",
      onMessage: function(msg) {
        assert.equal( msg[0], 'undefined', 'functions are stripped from contentScriptOptions' );
        assert.equal( typeof msg[1], 'object', 'object as contentScriptOptions' );
        assert.equal( msg[1].a, true, 'boolean in contentScriptOptions' );
        assert.equal( msg[1].b.join(), '1,2,3', 'array and numbers in contentScriptOptions' );
        assert.equal( msg[1].c, 'string', 'string in contentScriptOptions' );
        done();
      }
    });
  const { getActiveView } = loader.require("sdk/view/core");
  getActiveView(panel);
};
Пример #11
0
exports["test Panel Text Color"] = function(assert, done) {
  const { Panel } = require('sdk/panel');
  let { getActiveView } = require('sdk/view/core');

  let html = "<html><head><style>body {color: yellow}</style></head>" +
             "<body><p>Foo</p></body></html>";
  let panel = Panel({
    contentURL: "data:text/html;charset=utf-8," + encodeURI(html),
    contentScript: "self.port.emit('color', " +
                   "window.getComputedStyle(document.body.firstChild, null). " +
                   "       getPropertyValue('color'));"
  });
  panel.port.on("color", function (color) {
    assert.equal(color, "rgb(255, 255, 0)",
      "The panel text color style is preserved when a style exists.");
    panel.destroy();
    done();
  });
  getActiveView(panel);
};
Пример #12
0
exports['test panel contextmenu disabled'] = function*(assert) {
  const loader = Loader(module);
  const { Panel } = loader.require('sdk/panel');
  const { getActiveView } = loader.require('sdk/view/core');
  const { getContentDocument } = loader.require('sdk/panel/utils');

  let contextmenu = getMostRecentBrowserWindow().
                      document.getElementById("contentAreaContextMenu");
  let listener = () => assert.fail('popupshown should never be called');

  let panel = Panel();

  panel.show();

  yield wait(panel, 'show');

  let view = getActiveView(panel);
  let window = getContentDocument(view).defaultView;

  let { sendMouseEvent } = window.QueryInterface(Ci.nsIInterfaceRequestor).
                                    getInterface(Ci.nsIDOMWindowUtils);

  yield ready(window);

  assert.equal(contextmenu.state, 'closed',
    'contextmenu must be closed');

  sendMouseEvent('contextmenu', 20, 20, 2, 1, 0);

  contextmenu.addEventListener('popupshown', listener);

  yield wait(1000);

  contextmenu.removeEventListener('popupshown', listener);

  assert.equal(contextmenu.state, 'closed',
    'contextmenu was never open');

  loader.unload();
}
Пример #13
0
 panel.on('show', _ => {
   let panelEle = getActiveView(panel);
   button.state(tab, { checked: true });
   portalShowing.set(panel, true);
   let window = getContentFrame(panelEle).contentWindow;
   if (!window.document.hasFocus()) {
     window.focus()
   }
   panelEle.setAttribute('consumeoutsideclicks', 'true');
   getContentFrame(panelEle).setAttribute('showcaret', 'false');
   function destroy() {
     tab.removeListener('deactivate', deactivate);
     portalShowing.delete(panel);
   }
   function deactivate() {
     tab.removeListener('deactivate', deactivate);
     panel.off('hide', destroy);
     panel.hide();
   }
   tab.on('deactivate', deactivate);
   panel.on('hide', destroy);
 });
Пример #14
0
exports["test Document Reload"] = function(assert, done) {
  const { Panel } = require('sdk/panel');
  const { getActiveView } = require("sdk/view/core");

  let url2 = "data:text/html;charset=utf-8,page2";
  let content =
    "<script>" +
    "window.addEventListener('message', function({ data }) {"+
    "  if (data == 'move') window.location = '" + url2 + "';" +
    '}, false);' +
    "</script>";
  let messageCount = 0;
  let panel = Panel({
    // using URL here is intentional, see bug 859009
    contentURL: URL("data:text/html;charset=utf-8," + encodeURIComponent(content)),
    contentScript: "self.postMessage(window.location.href);" +
                   // initiate change to url2
                   "self.port.once('move', () => document.defaultView.postMessage('move', '*'));",
    onMessage: function (message) {
      messageCount++;
      assert.notEqual(message, "about:blank", "about:blank is not a message " + messageCount);

      if (messageCount == 1) {
        assert.ok(/data:text\/html/.test(message), "First document had a content script; " + message);
        panel.port.emit('move');
        assert.pass('move message was sent');
        return;
      }
      else if (messageCount == 2) {
        assert.equal(message, url2, "Second document too; " + message);
        panel.destroy();
        done();
      }
    }
  });
  getActiveView(panel);
  assert.pass('Panel was created');
};
Пример #15
0
exports['test panel contextmenu enabled'] = function*(assert) {
  const loader = Loader(module);
  const { Panel } = loader.require('sdk/panel');
  const { getActiveView } = loader.require('sdk/view/core');
  const { getContentDocument } = loader.require('sdk/panel/utils');

  let contextmenu = getMostRecentBrowserWindow().
                      document.getElementById("contentAreaContextMenu");

  let panel = Panel({contextMenu: true});

  panel.show();

  yield wait(panel, 'show');

  let view = getActiveView(panel);
  let window = getContentDocument(view).defaultView;

  let { sendMouseEvent } = window.QueryInterface(Ci.nsIInterfaceRequestor).
                                    getInterface(Ci.nsIDOMWindowUtils);

  yield ready(window);

  assert.equal(contextmenu.state, 'closed',
    'contextmenu must be closed');

  sendMouseEvent('contextmenu', 20, 20, 2, 1, 0);

  yield wait(contextmenu, 'popupshown');

  assert.equal(contextmenu.state, 'open',
    'contextmenu is opened');

  contextmenu.hidePopup();

  loader.unload();
}
Пример #16
0
function sendMetricsData(o, panel) {
  const coords = getActiveView(panel).getBoundingClientRect();

  // NOTE: this packet follows a predefined data format and cannot be changed
  //       without notifying the data team. See docs/metrics.md for more.
  const data = {
    object: o.object,
    method: o.method,
    domain: o.domain,
    'played_count': o.playedCount,
    video_x: coords.top,
    video_y: coords.left,
    video_width: coords.width,
    video_height: coords.height
  };

  const subject = {
    wrappedJSObject: {
      observersModuleSubjectWrapper: true,
      object: '@min-vid'
    }
  };
  Services.obs.notifyObservers(subject, 'testpilot::send-metric', JSON.stringify(data));
}
Пример #17
0
exports["test Panel"] = function(assert, done) {
  const { Panel } = require('sdk/panel');
  const { getActiveView } = require("sdk/view/core");

  let panel = Panel({
    contentURL: "about:buildconfig",
    contentScript: "self.postMessage(1); self.on('message', () => self.postMessage(2));",
    onMessage: function (message) {
      assert.equal(this, panel, "The 'this' object is the panel.");
      switch(message) {
        case 1:
          assert.pass("The panel was loaded.");
          panel.postMessage('');
          break;
        case 2:
          assert.pass("The panel posted a message and received a response.");
          panel.destroy();
          done();
          break;
      }
    }
  });
  getActiveView(panel);
};
Пример #18
0
 onChange: function (state) {
   if (state.checked) {
     // do not load panel until it is actually requested
     if (!panel) {
       panel = panels.Panel({
         width: config.popup.width,
         height: config.popup.height,
         contentURL: self.data.url('./popup/index.html'),
         contentScriptFile: [
           self.data.url('./popup/firefox/firefox.js'),
           self.data.url('./popup/index.js')
         ],
         contentStyleFile : self.data.url('./popup/index.css'),
         contentScriptWhen: 'start',
         onHide: () => button.state('window', {checked: false})
       });
       core.getActiveView(panel).setAttribute('tooltip', 'aHTMLTooltip');
       callbacks.forEach(([id, callback]) => panel.port.on(id, callback));
     }
     panel.show({
       position: button
     });
   }
 }
Пример #19
0
exports["test Panel script allow property"] = function*(assert) {
  const loader = Loader(module);
  const { Panel } = loader.require('sdk/panel');
  const { getActiveView } = loader.require('sdk/view/core');

  const contentURL = 'data:text/html;charset=utf-8,' +
    encodeURIComponent(`<body onclick='postMessage("got script click", "*")'>
        <script>
        document.body.appendChild(document.createElement('unwanted'))
        </script>
        </body>`);
  let panel = Panel({
    contentURL,
    allow: {script: false},
  });

  panel.show();

  yield wait(panel, 'show');

  let { contentWindow } = getActiveView(panel).querySelector('iframe');

  assert.equal(contentWindow.document.body.lastElementChild.localName, "script",
               "Script should not have executed");

  panel.allow.script = true;

  let p = wait(contentWindow, "message");
  let event = new contentWindow.MouseEvent('click', {});
  contentWindow.document.body.dispatchEvent(event);

  let msg = yield p;
  assert.equal(msg.data, "got script click", "Should have seen script click");

  loader.unload();
};
Пример #20
0
  browser.src = 'https://keep.google.com';
  browser.reload();
});
panel.port.on('pin', function (bol) {
  getActiveView(panel).setAttribute('noautohide', bol);
});

browser = (function (panelView) {
  // we use a safe browser element (type=content)
  let b = panelView.ownerDocument.createElement('browser');
  b.setAttribute('type', 'content');
  b.setAttribute('style', 'width: 660px;');
  panelView.appendChild(b);
  b.setAttribute('src', 'https://keep.google.com/');
  return b;
})(getActiveView(panel));

// FAQs page
exports.main = function (options) {
  if (options.loadReason === 'install' || options.loadReason === 'startup') {
    let version = sp.prefs.version;
    if (self.version !== version) {
      timers.setTimeout(function () {
        tabs.open(
          'http://add0n.com/google-keep.html?v=' + self.version +
          (version ? '&p=' + version + '&type=upgrade' : '&type=install')
        );
      }, 3000);
      sp.prefs.version = self.version;
    }
  }
Пример #21
0
 let getContentWindow = panel => {
   return getActiveView(panel).querySelector('iframe').contentWindow;
 }
Пример #22
0
target.on('loggedIn', function() { 

button.icon = {
    "16": "./img/icon-16.png",
    "32": "./img/icon-32.png",
    "64": "./img/icon-64.png"
  };

/* === Gestion Panel === */
panel_form = require("sdk/panel").Panel({
  width: 357,
  height: 423,
  contentURL: data.url("./view/panel.html"),
  contentScriptFile: [data.url("./js/jquery-2.2.0.min.js"), data.url("./js/main.js")],
  onHide: handleHide
});

/* hack q&d pour activer les attributs title dans le panel */
getActiveView(panel_form).setAttribute('tooltip', 'aHTMLTooltip');

panel_form.port.on("lang", function(){

      var langs = "auto,authors,back,cancel,email,greetings,logout,offline,online,register,safe,save,settings,status,title,username,welcome".split(',');
      var langsResults = {};
      var i;
      for (i = 0; i < langs.length; i++) {
        langsResults[langs[i]] = _(langs[i]);
      }
      panel_form.port.emit("lang", langsResults, tokenUser);

});

panel_form.port.on("creds_send", function(username, password, URLPageForm){

  var param = {login:username, mdp:password, URL:URLPageForm};
  var parsed = parseOut("AjoutID", param);
  var options = {
        url:        'http://127.0.0.1:9000/theluggage',
        contentType: 'text/plain',
        data: 'data='+parsed,
        type: 'POST',
        success: function(reponse){var message = parseIn(reponse); if (message === true) prompts.alert(null, "Enregistrement", "OK !");},
        error: function(reponse){prompts.alert(null, "failed", dataR.status);}

  };
  sendAjax(options);
});

/* ====================== */


/* === Page grabber === */
pageMod.PageMod({
  include: ["*"],
  contentScriptFile: [data.url("./js/jquery-2.2.0.min.js"), data.url("./js/grabber.js")],
  onAttach: function onAttach(worker) {
     worker.port.on("creds_submit", function(mail, uname, pass, url, champLogin, champPassword){

          var param = {login:uname, mdp:pass, URL:url};
          var parsed = parseOut("CheckID", param);

          var options = {
                url:        'http://127.0.0.1:9000/theluggage',
                contentType: 'text/plain',
                data: 'data='+parsed,
                type: 'POST',
                success: function(reponse){/*pas sur*/var message = parseIn(reponse); if(message === false) handleSubmitSuccess(mail, uname, pass, url);},
                error: function(reponse){}

          };
          sendAjax(options);
          /* =========== */

     });

     /* event creds fill : site avec formulaire repéré*/
      worker.port.on("creds_fill", function(fieldLog, fieldPass, url){

        var param = {nomFieldLogin:fieldLog, nomFieldMdp:fieldPass, URL:url};
        var profils = [];
        var profzero = {login:"", mdp:""}
        profils.push(profzero);
        var parsed = parseOut("RemplirForm", param);
        var options = {
                url:        'http://127.0.0.1:9000/theluggage',
                contentType: 'text/plain',
                data: 'data='+parsed,
                type: 'POST',
                success: function(reponse){var profils = parseIn(reponse); if(handleFillSuccess(profils,url) === true) worker.port.emit("fill", fieldLog, fieldPass, profils[0].login, profils[0].mdp, true);},
                error: function(reponse){}

          };
          sendAjax(options);
     });
  }
});
/* =============== */


}); // fin event target
Пример #23
0
let dimensions = getDocumentDimensions();

const panel = require('sdk/panel').Panel({
  contentURL: './default.html',
  contentScriptFile: './controls.js',
  width: 320,
  height: 180,
  position: {
    bottom: 10,
    left: 10
  }
});

const { getActiveView } = require('sdk/view/core');
getActiveView(panel).setAttribute('noautohide', true);

panel.port.on('addon-message', opts => {
  const title = opts.action;

  if (title === 'send-to-tab') {
    const pageUrl = getPageUrl(opts.domain, opts.id, opts.time);
    if (pageUrl) require('sdk/tabs').open(pageUrl);
    else {
      console.error('could not parse page url for ', opts); // eslint-disable-line no-console
      panel.port.emit('set-video', {error: 'Error loading video from ' + opts.domain});
    }
    panel.port.emit('set-video', {domain: '', src: ''});
    panel.hide();
  } else if (title === 'close') {
    panel.port.emit('set-video', {domain: '', src: ''});
Пример #24
0
    "panel-overlays.js",
    "panel-conflicts.js",
    "shared-modifiers.js",
    "panel.js"
  ].map(file => self.data.url(file)),

  onShow() {
    panel.port.emit("showing");
  },

  onHide() {
    panel.port.emit("hiding");
  }
});

let view = getActiveView(panel);
view.setAttribute("ignorekeys", "true");
view.setAttribute("noautohide", "true");

panel.port.on("ready", function () {
  panel.port.emit("platform", gPlatform = system.platform);
  panel.port.emit("overlays", gOverlays = storage[STORAGE_KEY] || {});
  panel.port.emit("hotkeys", gHotKeys = hotkeys.get());
});

panel.port.on("hide", () => panel.hide());

let button = ActionButton({
  id: "shortcuts-button",
  label: "Customize Shortcuts",
Пример #25
0
  label: "dotHIV",
  icon: ICONS_OFF,

  onClick: function (state) {
    panel.show({position: button});
  }
});

panel.port.on("ready", function () {
  // Update the panel's language.
  let currentLocale = locale.findClosestLocale(["en-us", "de-de"]) || "en-us";
  panel.port.emit("locale", currentLocale);
});

// Activate tooltips for our panel.
getActiveView(panel).querySelector("iframe").setAttribute("tooltip", "aHTMLTooltip");

panel.port.on("resize", function ({width, height}) {
  // Update the panel size.
  panel.resize(width + 6, height + 6);
});

panel.port.on("navigate", function (url) {
  tabs.open(url);
  panel.hide();
});

// Update the general state when the panel's checkbox changes.
panel.port.on("toggle", updateGeneralState);

function updateGeneralState(enabled) {
Пример #26
0
 const getContentWindow = panel =>
   getActiveView(panel).querySelector('iframe').contentWindow;
Пример #27
0
  const synthesizeClick = (panel, options) => {
    let { contentWindow } = getActiveView(panel).querySelector('iframe');
    let event = new contentWindow.MouseEvent('click', options);

    contentWindow.document.querySelector('a').dispatchEvent(event);
  }
Пример #28
0
panel.port.on('pin', function (bol) {
  getActiveView(panel).setAttribute('noautohide', bol);
});