summaryrefslogtreecommitdiff
path: root/chromium/content/browser/devtools/protocol/page_handler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/devtools/protocol/page_handler.cc')
-rw-r--r--chromium/content/browser/devtools/protocol/page_handler.cc52
1 files changed, 20 insertions, 32 deletions
diff --git a/chromium/content/browser/devtools/protocol/page_handler.cc b/chromium/content/browser/devtools/protocol/page_handler.cc
index 630de0dd016..f1aef415f19 100644
--- a/chromium/content/browser/devtools/protocol/page_handler.cc
+++ b/chromium/content/browser/devtools/protocol/page_handler.cc
@@ -14,6 +14,7 @@
#include "base/location.h"
#include "base/memory/ref_counted.h"
#include "base/memory/ref_counted_memory.h"
+#include "base/numerics/safe_conversions.h"
#include "base/process/process_handle.h"
#include "base/single_thread_task_runner.h"
#include "base/strings/string16.h"
@@ -28,6 +29,7 @@
#include "content/browser/devtools/protocol/browser_handler.h"
#include "content/browser/devtools/protocol/devtools_mhtml_helper.h"
#include "content/browser/devtools/protocol/emulation_handler.h"
+#include "content/browser/devtools/protocol/handler_helpers.h"
#include "content/browser/frame_host/navigation_request.h"
#include "content/browser/frame_host/navigator.h"
#include "content/browser/manifest/manifest_manager_host.h"
@@ -469,20 +471,10 @@ void PageHandler::Navigate(const std::string& url,
else
type = ui::PAGE_TRANSITION_TYPED;
- FrameTreeNode* frame_tree_node = nullptr;
std::string out_frame_id = frame_id.fromMaybe(
host_->frame_tree_node()->devtools_frame_token().ToString());
- FrameTreeNode* root = host_->frame_tree_node();
- if (root->devtools_frame_token().ToString() == out_frame_id) {
- frame_tree_node = root;
- } else {
- for (FrameTreeNode* node : root->frame_tree()->SubtreeNodes(root)) {
- if (node->devtools_frame_token().ToString() == out_frame_id) {
- frame_tree_node = node;
- break;
- }
- }
- }
+ FrameTreeNode* frame_tree_node = FrameTreeNodeFromDevToolsFrameToken(
+ host_->frame_tree_node(), out_frame_id);
if (!frame_tree_node) {
callback->sendFailure(
@@ -703,7 +695,7 @@ void PageHandler::CaptureScreenshot(
base::BindOnce(&PageHandler::ScreenshotCaptured,
weak_factory_.GetWeakPtr(), std::move(callback),
screenshot_format, screenshot_quality, gfx::Size(),
- gfx::Size(), blink::WebDeviceEmulationParams()),
+ gfx::Size(), blink::DeviceEmulationParams()),
false);
return;
}
@@ -711,9 +703,9 @@ void PageHandler::CaptureScreenshot(
// Welcome to the neural net of capturing screenshot while emulating device
// metrics!
bool emulation_enabled = emulation_handler_->device_emulation_enabled();
- blink::WebDeviceEmulationParams original_params =
+ blink::DeviceEmulationParams original_params =
emulation_handler_->GetDeviceEmulationParams();
- blink::WebDeviceEmulationParams modified_params = original_params;
+ blink::DeviceEmulationParams modified_params = original_params;
// Capture original view size if we know we are going to destroy it. We use
// it in ScreenshotCaptured to restore.
@@ -724,38 +716,34 @@ void PageHandler::CaptureScreenshot(
gfx::Size emulated_view_size = modified_params.view_size;
double dpfactor = 1;
- ScreenInfo screen_info;
- widget_host->GetScreenInfo(&screen_info);
+ float widget_host_device_scale_factor = widget_host->GetDeviceScaleFactor();
if (emulation_enabled) {
// When emulating, emulate again and scale to make resulting image match
// physical DP resolution. If view_size is not overriden, use actual view
// size.
float original_scale =
original_params.scale > 0 ? original_params.scale : 1;
- if (!modified_params.view_size.width) {
+ if (!modified_params.view_size.width()) {
emulated_view_size.set_width(
ceil(original_view_size.width() / original_scale));
}
- if (!modified_params.view_size.height) {
+ if (!modified_params.view_size.height()) {
emulated_view_size.set_height(
ceil(original_view_size.height() / original_scale));
}
dpfactor = modified_params.device_scale_factor
? modified_params.device_scale_factor /
- screen_info.device_scale_factor
+ widget_host_device_scale_factor
: 1;
// When clip is specified, we scale viewport via clip, otherwise we use
// scale.
modified_params.scale = clip.isJust() ? 1 : dpfactor;
- modified_params.view_size.width = emulated_view_size.width();
- modified_params.view_size.height = emulated_view_size.height();
+ modified_params.view_size = emulated_view_size;
} else if (clip.isJust()) {
// When not emulating, still need to emulate the page size.
- modified_params.view_size.width = original_view_size.width();
- modified_params.view_size.height = original_view_size.height();
- modified_params.screen_size.width = 0;
- modified_params.screen_size.height = 0;
+ modified_params.view_size = original_view_size;
+ modified_params.screen_size = gfx::Size();
modified_params.device_scale_factor = 0;
modified_params.scale = 1;
}
@@ -766,19 +754,19 @@ void PageHandler::CaptureScreenshot(
clip.fromJust()->GetY());
modified_params.viewport_scale = clip.fromJust()->GetScale() * dpfactor;
if (IsUseZoomForDSFEnabled()) {
- modified_params.viewport_offset.Scale(screen_info.device_scale_factor);
+ modified_params.viewport_offset.Scale(widget_host_device_scale_factor);
}
}
- // We use WebDeviceEmulationParams to either emulate, set viewport or both.
+ // We use DeviceEmulationParams to either emulate, set viewport or both.
emulation_handler_->SetDeviceEmulationParams(modified_params);
// Set view size for the screenshot right after emulating.
if (clip.isJust()) {
double scale = dpfactor * clip.fromJust()->GetScale();
widget_host->GetView()->SetSize(
- gfx::Size(gfx::ToRoundedInt(clip.fromJust()->GetWidth() * scale),
- gfx::ToRoundedInt(clip.fromJust()->GetHeight() * scale)));
+ gfx::Size(base::ClampRound(clip.fromJust()->GetWidth() * scale),
+ base::ClampRound(clip.fromJust()->GetHeight() * scale)));
} else if (emulation_enabled) {
widget_host->GetView()->SetSize(
gfx::ScaleToFlooredSize(emulated_view_size, dpfactor));
@@ -792,7 +780,7 @@ void PageHandler::CaptureScreenshot(
requested_image_size = emulated_view_size;
}
double scale = emulation_enabled ? original_params.device_scale_factor
- : screen_info.device_scale_factor;
+ : widget_host_device_scale_factor;
if (clip.isJust())
scale *= clip.fromJust()->GetScale();
requested_image_size = gfx::ScaleToRoundedSize(requested_image_size, scale);
@@ -1094,7 +1082,7 @@ void PageHandler::ScreenshotCaptured(
int quality,
const gfx::Size& original_view_size,
const gfx::Size& requested_image_size,
- const blink::WebDeviceEmulationParams& original_emulation_params,
+ const blink::DeviceEmulationParams& original_emulation_params,
const gfx::Image& image) {
if (original_view_size.width()) {
RenderWidgetHostImpl* widget_host = host_->GetRenderWidgetHost();