Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(305)

Unified Diff: third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js

Issue 1840533002: Devtools: Add screenshot button to device mode toolbar. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebaselined again Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js
index ef554e07e157f455eb37d68161d66a6db318e0a0..834b4a4c133ebbb19216e6f895b30bdc38a5dcf9 100644
--- a/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js
+++ b/third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js
@@ -351,6 +351,51 @@ WebInspector.DeviceModeView.prototype = {
this._model.emulate(WebInspector.DeviceModeModel.Type.None, null, null);
},
+ captureScreenshot: function()
+ {
+ var mainTarget = WebInspector.targetManager.mainTarget();
+ if (!mainTarget)
+ return;
+ mainTarget.pageAgent().captureScreenshot(screenshotCaptured.bind(this));
+
+ /**
+ * @param {?Protocol.Error} error
+ * @param {string} content
+ * @this {WebInspector.DeviceModeView}
+ */
+ function screenshotCaptured(error, content)
+ {
+ if (error)
+ return;
+
+ // Create a canvas to splice the images together.
+ var canvas = createElement("canvas");
+ var ctx = canvas.getContext("2d");
+ var screenRect = this._model.screenRect();
+ canvas.width = screenRect.width;
+ canvas.height = screenRect.height;
+ // Add any available screen images.
+ if (this._model.screenImage()) {
+ var screenImage = new Image();
+ screenImage.srcset = this._model.screenImage();
+ ctx.drawImage(screenImage, 0, 0, screenRect.width, screenRect.height);
+ }
+ var pageImage = new Image();
+ pageImage.src = "data:image/png;base64," + content;
+ var visiblePageRect = this._model.visiblePageRect();
+ ctx.drawImage(pageImage, visiblePageRect.left, visiblePageRect.top, visiblePageRect.width, visiblePageRect.height);
+ var mainFrame = mainTarget.resourceTreeModel.mainFrame;
+ var fileName = mainFrame ? mainFrame.url.trimURL().removeURLFragment() : "";
+ if (this._model.type() === WebInspector.DeviceModeModel.Type.Device)
+ fileName += WebInspector.UIString("(%s)", this._model.device().title);
+ // Trigger download.
+ var link = createElement("a");
+ link.download = fileName + ".png";
+ link.href = canvas.toDataURL("image/png");
+ link.click();
+ }
+ },
+
__proto__: WebInspector.VBox.prototype
}

Powered by Google App Engine
This is Rietveld 408576698