Bug 1290420 - Set the metaViewportOverride flag when viewing a device with touch event support in Responsive Design Mode. r=jryans draft
authorBotond Ballo <botond@mozilla.com>
Sat, 16 Dec 2017 13:25:53 -0500
changeset 712463 2b326687e2bb0babef17c109010e97c132340def
parent 712160 20a524da1b26a9e385f0d3f69e275a8169c297df
child 744059 bce1abf46e0d076ad86f567a98cd23787fbad0ca
push id93340
push userbballo@mozilla.com
push dateSat, 16 Dec 2017 18:29:33 +0000
reviewersjryans
bugs1290420
milestone59.0a1
Bug 1290420 - Set the metaViewportOverride flag when viewing a device with touch event support in Responsive Design Mode. r=jryans MozReview-Commit-ID: EJF1gtMlJXm
devtools/client/responsive.html/manager.js
devtools/server/actors/emulation.js
devtools/shared/specs/emulation.js
--- a/devtools/client/responsive.html/manager.js
+++ b/devtools/client/responsive.html/manager.js
@@ -565,18 +565,22 @@ ResponsiveUI.prototype = {
   }),
 
   updateTouchSimulation: Task.async(function* (enabled) {
     let reloadNeeded;
     if (enabled) {
       reloadNeeded = yield this.emulationFront.setTouchEventsOverride(
         Ci.nsIDocShell.TOUCHEVENTS_OVERRIDE_ENABLED
       );
+      reloadNeeded |= yield this.emulationFront.setMetaViewportOverride(
+        Ci.nsIDocShell.META_VIEWPORT_OVERRIDE_ENABLED
+      );
     } else {
       reloadNeeded = yield this.emulationFront.clearTouchEventsOverride();
+      reloadNeeded |= yield this.emulationFront.clearMetaViewportOverride();
     }
     if (reloadNeeded) {
       this.getViewportBrowser().reload();
     }
   }),
 
   /**
    * Helper for tests. Assumes a single viewport for now.
--- a/devtools/server/actors/emulation.js
+++ b/devtools/server/actors/emulation.js
@@ -201,16 +201,43 @@ let EmulationActor = protocol.ActorClass
 
   clearTouchEventsOverride() {
     if (this._previousTouchEventsOverride !== undefined) {
       return this.setTouchEventsOverride(this._previousTouchEventsOverride);
     }
     return false;
   },
 
+  /* Meta viewport override */
+  
+  _previousMetaViewportOverride: undefined,
+
+  setMetaViewportOverride(flag) {
+    if (this.getMetaViewportOverride() == flag) {
+      return false;
+    }
+    if (this._previousMetaViewportOverride === undefined) {
+      this._previousMetaViewportOverride = this.getMetaViewportOverride();
+    }
+
+    this.docShell.metaViewportOverride = flag;
+    return true;
+  },
+
+  getMetaViewportOverride() {
+    return this.docShell.metaViewportOverride;
+  },
+
+  clearMetaViewportOverride() {
+    if (this._previousMetaViewportOverride !== undefined) {
+      return this.setMetaViewportOverride(this._previousMetaViewportOverride);
+    }
+    return false;
+  },
+    
   /* User agent override */
 
   _previousUserAgentOverride: undefined,
 
   setUserAgentOverride(userAgent) {
     if (this.getUserAgentOverride() == userAgent) {
       return false;
     }
--- a/devtools/shared/specs/emulation.js
+++ b/devtools/shared/specs/emulation.js
@@ -73,16 +73,39 @@ const emulationSpec = generateActorSpec(
 
     clearTouchEventsOverride: {
       request: {},
       response: {
         valueChanged: RetVal("boolean")
       }
     },
 
+    setMetaViewportOverride: {
+      request: {
+        flag: Arg(0, "number")
+      },
+      response: {
+        valueChanged: RetVal("boolean")
+      }
+    },
+
+    getMetaViewportOverride: {
+      request: {},
+      response: {
+        flag: RetVal("number")
+      }
+    },
+
+    clearMetaViewportOverride: {
+      request: {},
+      response: {
+        valueChanged: RetVal("boolean")
+      }
+    },
+
     setUserAgentOverride: {
       request: {
         flag: Arg(0, "string")
       },
       response: {
         valueChanged: RetVal("boolean")
       }
     },