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

Unified Diff: content/browser/devtools/protocol/page_handler.cc

Issue 1043173003: [DevTools] Move Page and Emulation handlers to RenderFrameHostImpl. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix non-debug-devtools compilation Created 5 years, 8 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: content/browser/devtools/protocol/page_handler.cc
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc
index d8ffcd5a5c062f7cbc8fb30463fba5b61fa0e9c9..cc69f7d2a291fc00943cc5d817885e37b78567e4 100644
--- a/content/browser/devtools/protocol/page_handler.cc
+++ b/content/browser/devtools/protocol/page_handler.cc
@@ -12,7 +12,7 @@
#include "base/strings/utf_string_conversions.h"
#include "base/threading/worker_pool.h"
#include "content/browser/devtools/protocol/color_picker.h"
-#include "content/browser/renderer_host/render_view_host_impl.h"
+#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/common/view_messages.h"
@@ -20,6 +20,8 @@
#include "content/public/browser/javascript_dialog_manager.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/navigation_entry.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_types.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/browser/web_contents_delegate.h"
#include "content/public/common/referrer.h"
@@ -106,12 +108,29 @@ PageHandler::PageHandler()
PageHandler::~PageHandler() {
}
-void PageHandler::SetRenderViewHost(RenderViewHostImpl* host) {
+void PageHandler::SetRenderFrameHost(RenderFrameHostImpl* host) {
if (host_ == host)
return;
- color_picker_->SetRenderViewHost(host);
+ RenderWidgetHostImpl* widget_host =
+ host_ ? host_->GetRenderWidgetHost() : nullptr;
+ if (widget_host) {
+ registrar_.Remove(
+ this,
+ content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED,
+ content::Source<RenderWidgetHost>(widget_host));
+ }
+
host_ = host;
+ widget_host = host_ ? host_->GetRenderWidgetHost() : nullptr;
+ color_picker_->SetRenderWidgetHost(widget_host);
+
+ if (widget_host) {
+ registrar_.Add(
+ this,
+ content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED,
+ content::Source<RenderWidgetHost>(widget_host));
+ }
}
void PageHandler::SetClient(scoped_ptr<Client> client) {
@@ -134,9 +153,13 @@ void PageHandler::OnSwapCompositorFrame(
color_picker_->OnSwapCompositorFrame();
}
-void PageHandler::OnVisibilityChanged(bool visible) {
+void PageHandler::Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
if (!screencast_enabled_)
return;
+ DCHECK(type == content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED);
+ bool visible = *Details<bool>(details).ptr();
NotifyScreencastVisibility(visible);
}
@@ -173,12 +196,9 @@ Response PageHandler::Disable() {
Response PageHandler::Reload(const bool* ignoreCache,
const std::string* script_to_evaluate_on_load,
const std::string* script_preprocessor) {
- if (!host_)
- return Response::InternalError("Could not connect to view");
-
- WebContents* web_contents = WebContents::FromRenderViewHost(host_);
+ WebContentsImpl* web_contents = GetWebContents();
if (!web_contents)
- return Response::InternalError("No WebContents to reload");
+ return Response::InternalError("Could not connect to view");
// Handle in browser only if it is crashed.
if (!web_contents->IsCrashed())
@@ -194,12 +214,9 @@ Response PageHandler::Navigate(const std::string& url,
if (!gurl.is_valid())
return Response::InternalError("Cannot navigate to invalid URL");
- if (!host_)
- return Response::InternalError("Could not connect to view");
-
- WebContents* web_contents = WebContents::FromRenderViewHost(host_);
+ WebContentsImpl* web_contents = GetWebContents();
if (!web_contents)
- return Response::InternalError("No WebContents to navigate");
+ return Response::InternalError("Could not connect to view");
web_contents->GetController()
.LoadURL(gurl, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
@@ -208,12 +225,9 @@ Response PageHandler::Navigate(const std::string& url,
Response PageHandler::GetNavigationHistory(int* current_index,
NavigationEntries* entries) {
- if (!host_)
- return Response::InternalError("Could not connect to view");
-
- WebContents* web_contents = WebContents::FromRenderViewHost(host_);
+ WebContentsImpl* web_contents = GetWebContents();
if (!web_contents)
- return Response::InternalError("No WebContents to navigate");
+ return Response::InternalError("Could not connect to view");
NavigationController& controller = web_contents->GetController();
*current_index = controller.GetCurrentEntryIndex();
@@ -228,12 +242,9 @@ Response PageHandler::GetNavigationHistory(int* current_index,
}
Response PageHandler::NavigateToHistoryEntry(int entry_id) {
- if (!host_)
- return Response::InternalError("Could not connect to view");
-
- WebContents* web_contents = WebContents::FromRenderViewHost(host_);
+ WebContentsImpl* web_contents = GetWebContents();
if (!web_contents)
- return Response::InternalError("No WebContents to navigate");
+ return Response::InternalError("Could not connect to view");
NavigationController& controller = web_contents->GetController();
for (int i = 0; i != controller.GetEntryCount(); ++i) {
@@ -247,10 +258,10 @@ Response PageHandler::NavigateToHistoryEntry(int entry_id) {
}
Response PageHandler::CaptureScreenshot(DevToolsCommandId command_id) {
- if (!host_ || !host_->GetView())
+ if (!host_ || !host_->GetRenderWidgetHost())
return Response::InternalError("Could not connect to view");
- host_->GetSnapshotFromBrowser(
+ host_->GetRenderWidgetHost()->GetSnapshotFromBrowser(
base::Bind(&PageHandler::ScreenshotCaptured,
weak_factory_.GetWeakPtr(), command_id));
return Response::OK();
@@ -269,7 +280,9 @@ Response PageHandler::StartScreencast(const std::string* format,
const int* quality,
const int* max_width,
const int* max_height) {
- if (!host_)
+ RenderWidgetHostImpl* widget_host =
+ host_ ? host_->GetRenderWidgetHost() : nullptr;
+ if (!widget_host)
return Response::InternalError("Could not connect to view");
screencast_enabled_ = true;
@@ -280,13 +293,15 @@ Response PageHandler::StartScreencast(const std::string* format,
screencast_max_width_ = max_width ? *max_width : -1;
screencast_max_height_ = max_height ? *max_height : -1;
- bool visible = !host_->is_hidden();
+ bool visible = !widget_host->is_hidden();
NotifyScreencastVisibility(visible);
if (visible) {
- if (has_compositor_frame_metadata_)
+ if (has_compositor_frame_metadata_) {
InnerSwapCompositorFrame();
- else
- host_->Send(new ViewMsg_ForceRedraw(host_->GetRoutingID(), 0));
+ } else {
+ widget_host->Send(
+ new ViewMsg_ForceRedraw(widget_host->GetRoutingID(), 0));
+ }
}
if (screencast_listener_)
screencast_listener_->ScreencastEnabledChanged();
@@ -311,12 +326,9 @@ Response PageHandler::HandleJavaScriptDialog(bool accept,
if (prompt_text)
prompt_override = base::UTF8ToUTF16(*prompt_text);
- if (!host_)
- return Response::InternalError("Could not connect to view");
-
- WebContents* web_contents = WebContents::FromRenderViewHost(host_);
+ WebContentsImpl* web_contents = GetWebContents();
if (!web_contents)
- return Response::InternalError("No JavaScript dialog to handle");
+ return Response::InternalError("Could not connect to view");
JavaScriptDialogManager* manager =
web_contents->GetDelegate()->GetJavaScriptDialogManager(web_contents);
@@ -341,6 +353,12 @@ Response PageHandler::SetColorPickerEnabled(bool enabled) {
return Response::OK();
}
+WebContentsImpl* PageHandler::GetWebContents() {
+ return host_ ?
+ static_cast<WebContentsImpl*>(WebContents::FromRenderFrameHost(host_)) :
+ nullptr;
+}
+
void PageHandler::NotifyScreencastVisibility(bool visible) {
if (visible)
capture_retry_count_ = kCaptureRetryLimit;
« no previous file with comments | « content/browser/devtools/protocol/page_handler.h ('k') | content/browser/devtools/render_frame_devtools_agent_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698