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

Unified Diff: content/browser/devtools/render_view_devtools_agent_host.cc

Issue 884873004: DevTools: rename RenderViewDevToolsAgentHost to RenderFrame*. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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/render_view_devtools_agent_host.cc
diff --git a/content/browser/devtools/render_view_devtools_agent_host.cc b/content/browser/devtools/render_view_devtools_agent_host.cc
deleted file mode 100644
index 1f1edec7a22ab2fffb1969583daafbac56ece12c..0000000000000000000000000000000000000000
--- a/content/browser/devtools/render_view_devtools_agent_host.cc
+++ /dev/null
@@ -1,526 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/devtools/render_view_devtools_agent_host.h"
-
-#include "base/basictypes.h"
-#include "base/json/json_writer.h"
-#include "base/lazy_instance.h"
-#include "base/strings/utf_string_conversions.h"
-#include "content/browser/child_process_security_policy_impl.h"
-#include "content/browser/devtools/devtools_manager.h"
-#include "content/browser/devtools/protocol/devtools_protocol_handler.h"
-#include "content/browser/devtools/protocol/dom_handler.h"
-#include "content/browser/devtools/protocol/input_handler.h"
-#include "content/browser/devtools/protocol/inspector_handler.h"
-#include "content/browser/devtools/protocol/network_handler.h"
-#include "content/browser/devtools/protocol/page_handler.h"
-#include "content/browser/devtools/protocol/power_handler.h"
-#include "content/browser/devtools/protocol/tracing_handler.h"
-#include "content/browser/frame_host/render_frame_host_impl.h"
-#include "content/browser/renderer_host/render_process_host_impl.h"
-#include "content/browser/renderer_host/render_view_host_impl.h"
-#include "content/browser/site_instance_impl.h"
-#include "content/browser/web_contents/web_contents_impl.h"
-#include "content/common/view_messages.h"
-#include "content/public/browser/browser_context.h"
-#include "content/public/browser/content_browser_client.h"
-#include "content/public/browser/devtools_manager_delegate.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_types.h"
-#include "content/public/browser/render_widget_host_iterator.h"
-#include "content/public/browser/web_contents_delegate.h"
-
-#if defined(OS_ANDROID)
-#include "content/browser/power_save_blocker_impl.h"
-#include "content/public/browser/render_widget_host_view.h"
-#endif
-
-namespace content {
-
-typedef std::vector<RenderViewDevToolsAgentHost*> Instances;
-
-namespace {
-base::LazyInstance<Instances>::Leaky g_instances = LAZY_INSTANCE_INITIALIZER;
-
-static RenderViewDevToolsAgentHost* FindAgentHost(RenderFrameHost* host) {
- if (g_instances == NULL)
- return NULL;
- for (Instances::iterator it = g_instances.Get().begin();
- it != g_instances.Get().end(); ++it) {
- if ((*it)->HasRenderFrameHost(host))
- return *it;
- }
- return NULL;
-}
-
-// Returns RenderViewDevToolsAgentHost attached to any of RenderFrameHost
-// instances associated with |web_contents|
-static RenderViewDevToolsAgentHost* FindAgentHost(WebContents* web_contents) {
- if (g_instances == NULL)
- return NULL;
- for (Instances::iterator it = g_instances.Get().begin();
- it != g_instances.Get().end(); ++it) {
- if ((*it)->GetWebContents() == web_contents)
- return *it;
- }
- return NULL;
-}
-
-} // namespace
-
-scoped_refptr<DevToolsAgentHost>
-DevToolsAgentHost::GetOrCreateFor(WebContents* web_contents) {
- RenderViewDevToolsAgentHost* result = FindAgentHost(web_contents);
- if (!result)
- result = new RenderViewDevToolsAgentHost(web_contents->GetMainFrame());
- return result;
-}
-
-// static
-bool DevToolsAgentHost::HasFor(WebContents* web_contents) {
- return FindAgentHost(web_contents) != NULL;
-}
-
-// static
-bool DevToolsAgentHost::IsDebuggerAttached(WebContents* web_contents) {
- RenderViewDevToolsAgentHost* agent_host = FindAgentHost(web_contents);
- return agent_host && agent_host->IsAttached();
-}
-
-//static
-std::vector<WebContents*> DevToolsAgentHostImpl::GetInspectableWebContents() {
- std::set<WebContents*> set;
- scoped_ptr<RenderWidgetHostIterator> widgets(
- RenderWidgetHost::GetRenderWidgetHosts());
- while (RenderWidgetHost* widget = widgets->GetNextHost()) {
- // Ignore processes that don't have a connection, such as crashed contents.
- if (!widget->GetProcess()->HasConnection())
- continue;
- if (!widget->IsRenderView())
- continue;
-
- RenderViewHost* rvh = RenderViewHost::From(widget);
- WebContents* web_contents = WebContents::FromRenderViewHost(rvh);
- if (web_contents)
- set.insert(web_contents);
- }
- std::vector<WebContents*> result(set.size());
- std::copy(set.begin(), set.end(), result.begin());
- return result;
-}
-
-// static
-void RenderViewDevToolsAgentHost::OnCancelPendingNavigation(
- RenderFrameHost* pending,
- RenderFrameHost* current) {
- RenderViewDevToolsAgentHost* agent_host = FindAgentHost(pending);
- if (!agent_host)
- return;
- agent_host->DisconnectRenderFrameHost();
- agent_host->ConnectRenderFrameHost(current);
-}
-
-RenderViewDevToolsAgentHost::RenderViewDevToolsAgentHost(RenderFrameHost* rfh)
- : render_frame_host_(NULL),
- dom_handler_(new devtools::dom::DOMHandler()),
- input_handler_(new devtools::input::InputHandler()),
- inspector_handler_(new devtools::inspector::InspectorHandler()),
- network_handler_(new devtools::network::NetworkHandler()),
- page_handler_(new devtools::page::PageHandler()),
- power_handler_(new devtools::power::PowerHandler()),
- tracing_handler_(new devtools::tracing::TracingHandler(
- devtools::tracing::TracingHandler::Renderer)),
- protocol_handler_(new DevToolsProtocolHandler(
- base::Bind(&RenderViewDevToolsAgentHost::DispatchOnInspectorFrontend,
- base::Unretained(this)))),
- reattaching_(false) {
- DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher();
- dispatcher->SetDOMHandler(dom_handler_.get());
- dispatcher->SetInputHandler(input_handler_.get());
- dispatcher->SetInspectorHandler(inspector_handler_.get());
- dispatcher->SetNetworkHandler(network_handler_.get());
- dispatcher->SetPageHandler(page_handler_.get());
- dispatcher->SetPowerHandler(power_handler_.get());
- dispatcher->SetTracingHandler(tracing_handler_.get());
- SetRenderFrameHost(rfh);
- g_instances.Get().push_back(this);
- AddRef(); // Balanced in RenderFrameHostDestroyed.
- DevToolsManager::GetInstance()->AgentHostChanged(this);
-}
-
-BrowserContext* RenderViewDevToolsAgentHost::GetBrowserContext() {
- WebContents* contents = web_contents();
- return contents ? contents->GetBrowserContext() : nullptr;
-}
-
-WebContents* RenderViewDevToolsAgentHost::GetWebContents() {
- return web_contents();
-}
-
-void RenderViewDevToolsAgentHost::DispatchProtocolMessage(
- const std::string& message) {
- scoped_ptr<base::DictionaryValue> command =
- protocol_handler_->ParseCommand(message);
- if (!command)
- return;
-
- DevToolsManagerDelegate* delegate =
- DevToolsManager::GetInstance()->delegate();
- if (delegate) {
- scoped_ptr<base::DictionaryValue> response(
- delegate->HandleCommand(this, command.get()));
- if (response) {
- std::string json_response;
- base::JSONWriter::Write(response.get(), &json_response);
- DispatchOnInspectorFrontend(json_response);
- return;
- }
- }
-
- if (protocol_handler_->HandleOptionalCommand(command.Pass()))
- return;
-
- IPCDevToolsAgentHost::DispatchProtocolMessage(message);
-}
-
-void RenderViewDevToolsAgentHost::SendMessageToAgent(IPC::Message* msg) {
- if (!render_frame_host_)
- return;
- msg->set_routing_id(render_frame_host_->GetRoutingID());
- render_frame_host_->Send(msg);
-}
-
-void RenderViewDevToolsAgentHost::OnClientAttached() {
- if (!render_frame_host_)
- return;
-
- InnerOnClientAttached();
-
- // TODO(kaznacheev): Move this call back to DevToolsManager when
- // extensions::ProcessManager no longer relies on this notification.
- if (!reattaching_)
- DevToolsAgentHostImpl::NotifyCallbacks(this, true);
-}
-
-void RenderViewDevToolsAgentHost::InnerOnClientAttached() {
- ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadRawCookies(
- render_frame_host_->GetProcess()->GetID());
-
-#if defined(OS_ANDROID)
- power_save_blocker_.reset(
- static_cast<PowerSaveBlockerImpl*>(
- PowerSaveBlocker::Create(
- PowerSaveBlocker::kPowerSaveBlockPreventDisplaySleep,
- "DevTools").release()));
- RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
- render_frame_host_->GetRenderViewHost());
- if (rvh->GetView()) {
- power_save_blocker_.get()->
- InitDisplaySleepBlocker(rvh->GetView()->GetNativeView());
- }
-#endif
-}
-
-void RenderViewDevToolsAgentHost::OnClientDetached() {
-#if defined(OS_ANDROID)
- power_save_blocker_.reset();
-#endif
- page_handler_->Detached();
- power_handler_->Detached();
- tracing_handler_->Detached();
- ClientDetachedFromRenderer();
-
- // TODO(kaznacheev): Move this call back to DevToolsManager when
- // extensions::ProcessManager no longer relies on this notification.
- if (!reattaching_)
- DevToolsAgentHostImpl::NotifyCallbacks(this, false);
-}
-
-void RenderViewDevToolsAgentHost::ClientDetachedFromRenderer() {
- if (!render_frame_host_)
- return;
-
- InnerClientDetachedFromRenderer();
-}
-
-void RenderViewDevToolsAgentHost::InnerClientDetachedFromRenderer() {
- bool process_has_agents = false;
- RenderProcessHost* render_process_host = render_frame_host_->GetProcess();
- for (Instances::iterator it = g_instances.Get().begin();
- it != g_instances.Get().end(); ++it) {
- if (*it == this || !(*it)->IsAttached())
- continue;
- RenderFrameHost* rfh = (*it)->render_frame_host_;
- if (rfh && rfh->GetProcess() == render_process_host)
- process_has_agents = true;
- }
-
- // We are the last to disconnect from the renderer -> revoke permissions.
- if (!process_has_agents) {
- ChildProcessSecurityPolicyImpl::GetInstance()->RevokeReadRawCookies(
- render_process_host->GetID());
- }
-}
-
-RenderViewDevToolsAgentHost::~RenderViewDevToolsAgentHost() {
- Instances::iterator it = std::find(g_instances.Get().begin(),
- g_instances.Get().end(),
- this);
- if (it != g_instances.Get().end())
- g_instances.Get().erase(it);
-}
-
-// TODO(creis): Consider removing this in favor of RenderFrameHostChanged.
-void RenderViewDevToolsAgentHost::AboutToNavigateRenderFrame(
- RenderFrameHost* old_host,
- RenderFrameHost* new_host) {
- if (render_frame_host_ != old_host)
- return;
-
- // TODO(creis): This will need to be updated for --site-per-process, since
- // RenderViewHost is going away and navigations could happen in any frame.
- if (render_frame_host_ == new_host) {
- RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
- render_frame_host_->GetRenderViewHost());
- if (rvh->render_view_termination_status() ==
- base::TERMINATION_STATUS_STILL_RUNNING)
- return;
- }
- ReattachToRenderFrameHost(new_host);
-}
-
-void RenderViewDevToolsAgentHost::RenderFrameHostChanged(
- RenderFrameHost* old_host,
- RenderFrameHost* new_host) {
- if (old_host == render_frame_host_ && new_host != render_frame_host_) {
- // AboutToNavigateRenderFrame was not called for renderer-initiated
- // navigation.
- ReattachToRenderFrameHost(new_host);
- }
-}
-
-void
-RenderViewDevToolsAgentHost::ReattachToRenderFrameHost(RenderFrameHost* rfh) {
- DCHECK(!reattaching_);
- reattaching_ = true;
- DisconnectRenderFrameHost();
- ConnectRenderFrameHost(rfh);
- reattaching_ = false;
-}
-
-void RenderViewDevToolsAgentHost::RenderFrameDeleted(RenderFrameHost* rfh) {
- if (rfh != render_frame_host_)
- return;
-
- DCHECK(render_frame_host_);
- scoped_refptr<RenderViewDevToolsAgentHost> protect(this);
- HostClosed();
- ClearRenderFrameHost();
- DevToolsManager::GetInstance()->AgentHostChanged(this);
- Release();
-}
-
-void RenderViewDevToolsAgentHost::RenderProcessGone(
- base::TerminationStatus status) {
- switch(status) {
- case base::TERMINATION_STATUS_ABNORMAL_TERMINATION:
- case base::TERMINATION_STATUS_PROCESS_WAS_KILLED:
- case base::TERMINATION_STATUS_PROCESS_CRASHED:
-#if defined(OS_ANDROID)
- case base::TERMINATION_STATUS_OOM_PROTECTED:
-#endif
- RenderFrameCrashed();
- break;
- default:
- break;
- }
-}
-
-bool RenderViewDevToolsAgentHost::OnMessageReceived(
- const IPC::Message& message) {
- if (!render_frame_host_)
- return false;
- if (message.type() == ViewHostMsg_SwapCompositorFrame::ID)
- OnSwapCompositorFrame(message);
- return false;
-}
-
-bool RenderViewDevToolsAgentHost::OnMessageReceived(
- const IPC::Message& message,
- RenderFrameHost* render_frame_host) {
- if (!render_frame_host_ || render_frame_host != render_frame_host_)
- return false;
-
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(RenderViewDevToolsAgentHost, message)
- IPC_MESSAGE_HANDLER(DevToolsClientMsg_DispatchOnInspectorFrontend,
- OnDispatchOnInspectorFrontend)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
- return handled;
-}
-
-void RenderViewDevToolsAgentHost::DidAttachInterstitialPage() {
- page_handler_->DidAttachInterstitialPage();
-
- if (!render_frame_host_)
- return;
- // The rvh set in AboutToNavigateRenderFrame turned out to be interstitial.
- // Connect back to the real one.
- WebContents* web_contents =
- WebContents::FromRenderFrameHost(render_frame_host_);
- if (!web_contents)
- return;
- DisconnectRenderFrameHost();
- ConnectRenderFrameHost(web_contents->GetMainFrame());
-}
-
-void RenderViewDevToolsAgentHost::DidDetachInterstitialPage() {
- page_handler_->DidDetachInterstitialPage();
-}
-
-void RenderViewDevToolsAgentHost::TitleWasSet(
- NavigationEntry* entry, bool explicit_set) {
- DevToolsManager::GetInstance()->AgentHostChanged(this);
-}
-
-void RenderViewDevToolsAgentHost::NavigationEntryCommitted(
- const LoadCommittedDetails& load_details) {
- DevToolsManager::GetInstance()->AgentHostChanged(this);
-}
-
-void RenderViewDevToolsAgentHost::Observe(int type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- if (type == content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED) {
- bool visible = *Details<bool>(details).ptr();
- page_handler_->OnVisibilityChanged(visible);
- }
-}
-
-void RenderViewDevToolsAgentHost::SetRenderFrameHost(RenderFrameHost* rfh) {
- DCHECK(!render_frame_host_);
- render_frame_host_ = static_cast<RenderFrameHostImpl*>(rfh);
-
- WebContentsObserver::Observe(WebContents::FromRenderFrameHost(rfh));
- RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
- rfh->GetRenderViewHost());
- dom_handler_->SetRenderViewHost(rvh);
- input_handler_->SetRenderViewHost(rvh);
- network_handler_->SetRenderViewHost(rvh);
- page_handler_->SetRenderViewHost(rvh);
-
- registrar_.Add(
- this,
- content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED,
- content::Source<RenderWidgetHost>(rvh));
-}
-
-void RenderViewDevToolsAgentHost::ClearRenderFrameHost() {
- DCHECK(render_frame_host_);
- RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
- render_frame_host_->GetRenderViewHost());
- registrar_.Remove(
- this,
- content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED,
- content::Source<RenderWidgetHost>(rvh));
- render_frame_host_ = nullptr;
- dom_handler_->SetRenderViewHost(nullptr);
- input_handler_->SetRenderViewHost(nullptr);
- network_handler_->SetRenderViewHost(nullptr);
- page_handler_->SetRenderViewHost(nullptr);
-}
-
-void RenderViewDevToolsAgentHost::DisconnectWebContents() {
- DisconnectRenderFrameHost();
-}
-
-void RenderViewDevToolsAgentHost::ConnectWebContents(WebContents* wc) {
- ConnectRenderFrameHost(wc->GetMainFrame());
-}
-
-DevToolsAgentHost::Type RenderViewDevToolsAgentHost::GetType() {
- return TYPE_WEB_CONTENTS;
-}
-
-std::string RenderViewDevToolsAgentHost::GetTitle() {
- if (WebContents* web_contents = GetWebContents())
- return base::UTF16ToUTF8(web_contents->GetTitle());
- return "";
-}
-
-GURL RenderViewDevToolsAgentHost::GetURL() {
- if (WebContents* web_contents = GetWebContents())
- return web_contents->GetVisibleURL();
- return render_frame_host_ ?
- render_frame_host_->GetLastCommittedURL() : GURL();
-}
-
-bool RenderViewDevToolsAgentHost::Activate() {
- if (render_frame_host_) {
- render_frame_host_->GetRenderViewHost()->GetDelegate()->Activate();
- return true;
- }
- return false;
-}
-
-bool RenderViewDevToolsAgentHost::Close() {
- if (render_frame_host_) {
- render_frame_host_->GetRenderViewHost()->ClosePage();
- return true;
- }
- return false;
-}
-
-void RenderViewDevToolsAgentHost::ConnectRenderFrameHost(RenderFrameHost* rfh) {
- SetRenderFrameHost(rfh);
- if (IsAttached())
- Reattach();
-}
-
-void RenderViewDevToolsAgentHost::DisconnectRenderFrameHost() {
- ClientDetachedFromRenderer();
- ClearRenderFrameHost();
-}
-
-void RenderViewDevToolsAgentHost::RenderFrameCrashed() {
- inspector_handler_->TargetCrashed();
-}
-
-void RenderViewDevToolsAgentHost::OnSwapCompositorFrame(
- const IPC::Message& message) {
- ViewHostMsg_SwapCompositorFrame::Param param;
- if (!ViewHostMsg_SwapCompositorFrame::Read(&message, &param))
- return;
- page_handler_->OnSwapCompositorFrame(get<1>(param).metadata);
-}
-
-void RenderViewDevToolsAgentHost::SynchronousSwapCompositorFrame(
- const cc::CompositorFrameMetadata& frame_metadata) {
- if (!render_frame_host_)
- return;
- page_handler_->OnSwapCompositorFrame(frame_metadata);
-}
-
-bool RenderViewDevToolsAgentHost::HasRenderFrameHost(
- RenderFrameHost* host) {
- return host == render_frame_host_;
-}
-
-void RenderViewDevToolsAgentHost::OnDispatchOnInspectorFrontend(
- const DevToolsMessageChunk& message) {
- if (!IsAttached() || !render_frame_host_)
- return;
- ProcessChunkedMessageFromAgent(message);
-}
-
-void RenderViewDevToolsAgentHost::DispatchOnInspectorFrontend(
- const std::string& message) {
- if (!IsAttached() || !render_frame_host_)
- return;
- SendMessageToClient(message);
-}
-
-} // namespace content
« no previous file with comments | « content/browser/devtools/render_view_devtools_agent_host.h ('k') | content/browser/frame_host/render_frame_host_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698