addon-sdk/source/lib/sdk/window/helpers.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     4 'use strict';
     6 const { defer } = require('../core/promise');
     7 const events = require('../system/events');
     8 const { open: openWindow, onFocus, getToplevelWindow,
     9         isInteractive, getOuterId } = require('./utils');
    10 const { Ci } = require("chrome");
    12 function open(uri, options) {
    13   return promise(openWindow.apply(null, arguments), 'load');
    14 }
    15 exports.open = open;
    17 function close(window) {
    18   let deferred = defer();
    19   let toplevelWindow = getToplevelWindow(window);
    20   let outerId = getOuterId(toplevelWindow);
    21   events.on("outer-window-destroyed", function onclose({subject}) {
    22     let id = subject.QueryInterface(Ci.nsISupportsPRUint64).data;
    23     if (id == outerId) {
    24       events.off("outer-window-destroyed", onclose);
    25       deferred.resolve();
    26     }
    27   }, true);
    28   window.close();
    29   return deferred.promise;
    30 }
    31 exports.close = close;
    33 function focus(window) {
    34   let p = onFocus(window);
    35   window.focus();
    36   return p;
    37 }
    38 exports.focus = focus;
    40 function ready(window) {
    41   let { promise: result, resolve } = defer();
    43   if (isInteractive(window))
    44     resolve(window);
    45   else
    46     resolve(promise(window, 'DOMContentLoaded'));
    48   return result;
    49 }
    50 exports.ready = ready;
    52 function promise(target, evt, capture) {
    53   let deferred = defer();
    54   capture = !!capture;
    56   target.addEventListener(evt, function eventHandler() {
    57     target.removeEventListener(evt, eventHandler, capture);
    58     deferred.resolve(target);
    59   }, capture);
    61   return deferred.promise;
    62 }
    63 exports.promise = promise;

mercurial