Commit 5690b5e0 authored by Ehsan Akhgari's avatar Ehsan Akhgari
Browse files

Bug 1317983 - Remove navigator.mozBrowserElementProxy; r=baku

This was implemented in bug 1196654 for the b2g system app, and is no longer
being used.
parent 8c9aab66
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -331,8 +331,6 @@
@RESPATH@/components/ConsoleAPIStorage.js
@RESPATH@/components/BrowserElementParent.manifest
@RESPATH@/components/BrowserElementParent.js
@RESPATH@/components/BrowserElementProxy.manifest
@RESPATH@/components/BrowserElementProxy.js
@RESPATH@/components/PhoneNumberService.js
@RESPATH@/components/PhoneNumberService.manifest
@RESPATH@/components/NotificationStorage.js
+0 −2
Original line number Diff line number Diff line
@@ -350,8 +350,6 @@
@RESPATH@/components/ConsoleAPIStorage.js
@RESPATH@/components/BrowserElementParent.manifest
@RESPATH@/components/BrowserElementParent.js
@RESPATH@/components/BrowserElementProxy.manifest
@RESPATH@/components/BrowserElementProxy.js
@RESPATH@/components/FeedProcessor.manifest
@RESPATH@/components/FeedProcessor.js
@RESPATH@/components/WellKnownOpportunisticUtils.js
+0 −5
Original line number Diff line number Diff line
@@ -131,11 +131,6 @@ this.PermissionsTable = { geolocation: {
                             privileged: ALLOW_ACTION,
                             certified: ALLOW_ACTION
                           },
                           "browser:embedded-system-app": {
                             app: DENY_ACTION,
                             privileged: DENY_ACTION,
                             certified: ALLOW_ACTION
                           },
                           mobilenetwork: {
                             app: DENY_ACTION,
                             privileged: ALLOW_ACTION,
+0 −39
Original line number Diff line number Diff line
@@ -115,38 +115,6 @@ var LISTENED_SYSTEM_EVENTS = [

var global = this;

function BrowserElementProxyForwarder() {
}

BrowserElementProxyForwarder.prototype = {
  init: function() {
    Services.obs.addObserver(this, "browser-element-api:proxy-call", false);
    addMessageListener("browser-element-api:proxy", this);
  },

  uninit: function() {
    Services.obs.removeObserver(this, "browser-element-api:proxy-call", false);
    removeMessageListener("browser-element-api:proxy", this);
  },

  // Observer callback receives messages from BrowserElementProxy.js
  observe: function(subject, topic, stringifedData) {
    if (subject !== content) {
      return;
    }

    // Forward it to BrowserElementParent.js
    sendAsyncMessage(topic, JSON.parse(stringifedData));
  },

  // Message manager callback receives messages from BrowserElementParent.js
  receiveMessage: function(mmMsg) {
    // Forward it to BrowserElementProxy.js
    Services.obs.notifyObservers(
      content, mmMsg.name, JSON.stringify(mmMsg.json));
  }
};

function BrowserElementChild() {
  // Maps outer window id --> weak ref to window.  Used by modal dialog code.
  this._windowIDDict = {};
@@ -165,8 +133,6 @@ function BrowserElementChild() {
  this._isContentWindowCreated = false;
  this._pendingSetInputMethodActive = [];

  this.forwarder = new BrowserElementProxyForwarder();

  this._init();
};

@@ -225,8 +191,6 @@ BrowserElementChild.prototype = {
    OBSERVED_EVENTS.forEach((aTopic) => {
      Services.obs.addObserver(this, aTopic, false);
    });

    this.forwarder.init();
  },

  /**
@@ -261,9 +225,6 @@ BrowserElementChild.prototype = {
    OBSERVED_EVENTS.forEach((aTopic) => {
      Services.obs.removeObserver(this, aTopic);
    });

    this.forwarder.uninit();
    this.forwarder = null;
  },

  handleEvent: function(event) {
+0 −175
Original line number Diff line number Diff line
@@ -60,176 +60,6 @@ function defineDOMRequestMethod(msgName) {
  };
}

function BrowserElementParentProxyCallHandler() {
}

BrowserElementParentProxyCallHandler.prototype = {
  _frameElement: null,
  _mm: null,

  MOZBROWSER_EVENT_NAMES: Object.freeze([
    "loadstart", "loadend", "close", "error", "firstpaint",
    "documentfirstpaint", "audioplaybackchange",
    "contextmenu", "securitychange", "locationchange",
    "iconchange", "scrollareachanged", "titlechange",
    "opensearch", "manifestchange", "metachange",
    "resize", "scrollviewchange",
    "caretstatechanged", "activitydone", "scroll", "opentab"]),

  init: function(frameElement, mm) {
    this._frameElement = frameElement;
    this._mm = mm;
    this.innerWindowIDSet = new Set();

    mm.addMessageListener("browser-element-api:proxy-call", this);
  },

  // Message manager callback receives messages from BrowserElementProxy.js
  receiveMessage: function(mmMsg) {
    let data = mmMsg.json;

    let mm;
    try {
      mm = mmMsg.target.QueryInterface(Ci.nsIFrameLoaderOwner)
                     .frameLoader.messageManager;
    } catch(e) {
      mm = mmMsg.target;
    }
    if (!mm.assertPermission("browser:embedded-system-app")) {
      dump("BrowserElementParent.js: Method call " + data.methodName +
        " from a content process with no 'browser:embedded-system-app'" +
        " privileges.\n");
      return;
    }

    switch (data.methodName) {
      case '_proxyInstanceInit':
        if (!this.innerWindowIDSet.size) {
          this._attachEventListeners();
        }
        this.innerWindowIDSet.add(data.innerWindowID);

        break;

      case '_proxyInstanceUninit':
        this.innerWindowIDSet.delete(data.innerWindowID);
        if (!this.innerWindowIDSet.size) {
          this._detachEventListeners();
        }

        break;

      // void methods
      case 'setVisible':
      case 'setActive':
      case 'sendMouseEvent':
      case 'sendTouchEvent':
      case 'goBack':
      case 'goForward':
      case 'reload':
      case 'stop':
      case 'zoom':
      case 'findAll':
      case 'findNext':
      case 'clearMatch':
      case 'mute':
      case 'unmute':
      case 'setVolume':
        this._frameElement[data.methodName]
          .apply(this._frameElement, data.args);

        break;

      // DOMRequest methods
      case 'getVisible':
      case 'download':
      case 'purgeHistory':
      case 'getCanGoBack':
      case 'getCanGoForward':
      case 'getContentDimensions':
      case 'setInputMethodActive':
      case 'executeScript':
      case 'getMuted':
      case 'getVolume':
        let req = this._frameElement[data.methodName]
          .apply(this._frameElement, data.args);
        req.onsuccess = () => {
          this._sendToProxy({
            domRequestId: data.domRequestId,
            innerWindowID: data.innerWindowID,
            result: req.result
          });
        };
        req.onerror = () => {
          this._sendToProxy({
            domRequestId: data.domRequestId,
            innerWindowID: data.innerWindowID,
            err: req.error
          });
        };

        break;

      // Not implemented
      case 'getActive': // Sync ???
      case 'addNextPaintListener': // Takes a callback
      case 'removeNextPaintListener': // Takes a callback
      case 'getScreenshot': // Need to pass a blob back
        dump("BrowserElementParentProxyCallHandler Error:" +
          "Attempt to call unimplemented method " + data.methodName + ".\n");
        break;

      default:
        dump("BrowserElementParentProxyCallHandler Error:" +
          "Attempt to call non-exist method " + data.methodName + ".\n");
        break;
    }
  },

  // Receving events from the frame element and forward it.
  handleEvent: function(evt) {
    // Ignore the events from nested mozbrowser iframes
    if (evt.target !== this._frameElement) {
      return;
    }

    let detailString;
    try {
      detailString = JSON.stringify(evt.detail);
    } catch (e) {
      dump("BrowserElementParentProxyCallHandler Error:" +
        "Event detail of " + evt.type + " can't be stingified.\n");
      return;
    }

    this.innerWindowIDSet.forEach((innerWindowID) => {
      this._sendToProxy({
        eventName: evt.type,
        innerWindowID: innerWindowID,
        eventDetailString: detailString
      });
    });
  },

  _sendToProxy: function(data) {
    this._mm.sendAsyncMessage("browser-element-api:proxy", data);
  },

  _attachEventListeners: function() {
    this.MOZBROWSER_EVENT_NAMES.forEach(function(eventName) {
      this._frameElement.addEventListener(
        "mozbrowser" + eventName, this, true);
    }, this);
  },

  _detachEventListeners: function() {
    this.MOZBROWSER_EVENT_NAMES.forEach(function(eventName) {
      this._frameElement.removeEventListener(
        "mozbrowser" + eventName, this, true);
    }, this);
  }
};

function BrowserElementParent() {
  debug("Creating new BrowserElementParent object");
  this._domRequestCounter = 0;
@@ -243,8 +73,6 @@ function BrowserElementParent() {
  Services.obs.addObserver(this, 'oop-frameloader-crashed', /* ownsWeak = */ true);
  Services.obs.addObserver(this, 'ask-children-to-execute-copypaste-command', /* ownsWeak = */ true);
  Services.obs.addObserver(this, 'back-docommand', /* ownsWeak = */ true);

  this.proxyCallHandler = new BrowserElementParentProxyCallHandler();
}

BrowserElementParent.prototype = {
@@ -291,9 +119,6 @@ BrowserElementParent.prototype = {
    // Insert ourself into the prompt service.
    BrowserElementPromptService.mapFrameToBrowserElementParent(this._frameElement, this);
    this._setupMessageListener();

    this.proxyCallHandler.init(
      this._frameElement, this._frameLoader.messageManager);
  },

  destroyFrameScripts() {
Loading