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

Unified Diff: chrome/browser/debugger/devtools_manager.cc

Issue 7274031: Wholesale move of debugger sources to content. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add OWNERS and DEPS. Created 9 years, 6 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: chrome/browser/debugger/devtools_manager.cc
diff --git a/chrome/browser/debugger/devtools_manager.cc b/chrome/browser/debugger/devtools_manager.cc
deleted file mode 100644
index 0f4180b955d82703d37255a9cf17e785491c9aae..0000000000000000000000000000000000000000
--- a/chrome/browser/debugger/devtools_manager.cc
+++ /dev/null
@@ -1,466 +0,0 @@
-// Copyright (c) 2011 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 "chrome/browser/debugger/devtools_manager.h"
-
-#include <vector>
-
-#include "base/auto_reset.h"
-#include "base/message_loop.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/debugger/devtools_client_host.h"
-#include "chrome/browser/debugger/devtools_netlog_observer.h"
-#include "chrome/browser/debugger/devtools_window.h"
-#include "chrome/browser/io_thread.h"
-#include "chrome/browser/prefs/pref_service.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
-#include "chrome/common/pref_names.h"
-#include "content/browser/browsing_instance.h"
-#include "content/browser/child_process_security_policy.h"
-#include "content/browser/renderer_host/render_view_host.h"
-#include "content/browser/site_instance.h"
-#include "content/common/devtools_messages.h"
-#include "content/common/notification_service.h"
-#include "googleurl/src/gurl.h"
-
-// static
-DevToolsManager* DevToolsManager::GetInstance() {
- // http://crbug.com/47806 this method may be called when BrowserProcess
- // has already been destroyed.
- if (!g_browser_process)
- return NULL;
- return g_browser_process->devtools_manager();
-}
-
-// static
-void DevToolsManager::RegisterUserPrefs(PrefService* prefs) {
- prefs->RegisterBooleanPref(prefs::kDevToolsOpenDocked,
- true,
- PrefService::UNSYNCABLE_PREF);
-}
-
-DevToolsManager::DevToolsManager()
- : inspected_rvh_for_reopen_(NULL),
- in_initial_show_(false),
- last_orphan_cookie_(0) {
- registrar_.Add(this, NotificationType::RENDER_VIEW_HOST_DELETED,
- NotificationService::AllSources());
-}
-
-DevToolsManager::~DevToolsManager() {
- DCHECK(inspected_rvh_to_client_host_.empty());
- DCHECK(client_host_to_inspected_rvh_.empty());
- // By the time we destroy devtools manager, all orphan client hosts should
- // have been delelted, no need to notify them upon tab closing.
- DCHECK(orphan_client_hosts_.empty());
-}
-
-DevToolsClientHost* DevToolsManager::GetDevToolsClientHostFor(
- RenderViewHost* inspected_rvh) {
- InspectedRvhToClientHostMap::iterator it =
- inspected_rvh_to_client_host_.find(inspected_rvh);
- if (it != inspected_rvh_to_client_host_.end())
- return it->second;
- return NULL;
-}
-
-void DevToolsManager::RegisterDevToolsClientHostFor(
- RenderViewHost* inspected_rvh,
- DevToolsClientHost* client_host) {
- DCHECK(!GetDevToolsClientHostFor(inspected_rvh));
-
- DevToolsRuntimeProperties initial_properties;
- BindClientHost(inspected_rvh, client_host, initial_properties);
- client_host->set_close_listener(this);
- SendAttachToAgent(inspected_rvh);
-}
-
-void DevToolsManager::ForwardToDevToolsAgent(
- RenderViewHost* client_rvh,
- const IPC::Message& message) {
- DevToolsClientHost* client_host = FindOwnerDevToolsClientHost(client_rvh);
- if (client_host)
- ForwardToDevToolsAgent(client_host, message);
-}
-
-void DevToolsManager::ForwardToDevToolsAgent(DevToolsClientHost* from,
- const IPC::Message& message) {
- RenderViewHost* inspected_rvh = GetInspectedRenderViewHost(from);
- if (!inspected_rvh) {
- // TODO(yurys): notify client that the agent is no longer available
- NOTREACHED();
- return;
- }
-
- IPC::Message* m = new IPC::Message(message);
- m->set_routing_id(inspected_rvh->routing_id());
- inspected_rvh->Send(m);
-}
-
-void DevToolsManager::ForwardToDevToolsClient(RenderViewHost* inspected_rvh,
- const IPC::Message& message) {
- DevToolsClientHost* client_host = GetDevToolsClientHostFor(inspected_rvh);
- if (!client_host) {
- // Client window was closed while there were messages
- // being sent to it.
- return;
- }
- client_host->SendMessageToClient(message);
-}
-
-void DevToolsManager::ActivateWindow(RenderViewHost* client_rvh) {
- DevToolsClientHost* client_host = FindOwnerDevToolsClientHost(client_rvh);
- if (!client_host)
- return;
-
- DevToolsWindow* window = client_host->AsDevToolsWindow();
- DCHECK(window);
- window->Activate();
-}
-
-void DevToolsManager::CloseWindow(RenderViewHost* client_rvh) {
- DevToolsClientHost* client_host = FindOwnerDevToolsClientHost(client_rvh);
- if (client_host) {
- RenderViewHost* inspected_rvh = GetInspectedRenderViewHost(client_host);
- DCHECK(inspected_rvh);
- UnregisterDevToolsClientHostFor(inspected_rvh);
- }
-}
-
-void DevToolsManager::RequestDockWindow(RenderViewHost* client_rvh) {
- ReopenWindow(client_rvh, true);
-}
-
-void DevToolsManager::RequestUndockWindow(RenderViewHost* client_rvh) {
- ReopenWindow(client_rvh, false);
-}
-
-void DevToolsManager::OpenDevToolsWindow(RenderViewHost* inspected_rvh) {
- ToggleDevToolsWindow(
- inspected_rvh,
- true,
- DEVTOOLS_TOGGLE_ACTION_NONE);
-}
-
-void DevToolsManager::ToggleDevToolsWindow(
- RenderViewHost* inspected_rvh,
- DevToolsToggleAction action) {
- ToggleDevToolsWindow(inspected_rvh, false, action);
-}
-
-void DevToolsManager::RuntimePropertyChanged(RenderViewHost* inspected_rvh,
- const std::string& name,
- const std::string& value) {
- RuntimePropertiesMap::iterator it =
- runtime_properties_map_.find(inspected_rvh);
- if (it == runtime_properties_map_.end()) {
- std::pair<RenderViewHost*, DevToolsRuntimeProperties> value(
- inspected_rvh,
- DevToolsRuntimeProperties());
- it = runtime_properties_map_.insert(value).first;
- }
- it->second[name] = value;
-}
-
-void DevToolsManager::InspectElement(RenderViewHost* inspected_rvh,
- int x,
- int y) {
- IPC::Message* m = new DevToolsAgentMsg_InspectElement(x, y);
- m->set_routing_id(inspected_rvh->routing_id());
- inspected_rvh->Send(m);
- // TODO(loislo): we should initiate DevTools window opening from within
- // renderer. Otherwise, we still can hit a race condition here.
- OpenDevToolsWindow(inspected_rvh);
-}
-
-void DevToolsManager::ClientHostClosing(DevToolsClientHost* host) {
- RenderViewHost* inspected_rvh = GetInspectedRenderViewHost(host);
- if (!inspected_rvh) {
- // It might be in the list of orphan client hosts, remove it from there.
- for (OrphanClientHosts::iterator it = orphan_client_hosts_.begin();
- it != orphan_client_hosts_.end(); ++it) {
- if (it->second.first == host) {
- orphan_client_hosts_.erase(it->first);
- return;
- }
- }
- return;
- }
-
- NotificationService::current()->Notify(
- NotificationType::DEVTOOLS_WINDOW_CLOSING,
- Source<Profile>(inspected_rvh->site_instance()->GetProcess()->profile()),
- Details<RenderViewHost>(inspected_rvh));
-
- UnbindClientHost(inspected_rvh, host);
-}
-
-void DevToolsManager::Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- DCHECK(type == NotificationType::RENDER_VIEW_HOST_DELETED);
- UnregisterDevToolsClientHostFor(Source<RenderViewHost>(source).ptr());
-}
-
-RenderViewHost* DevToolsManager::GetInspectedRenderViewHost(
- DevToolsClientHost* client_host) {
- ClientHostToInspectedRvhMap::iterator it =
- client_host_to_inspected_rvh_.find(client_host);
- if (it != client_host_to_inspected_rvh_.end())
- return it->second;
- return NULL;
-}
-
-void DevToolsManager::UnregisterDevToolsClientHostFor(
- RenderViewHost* inspected_rvh) {
- DevToolsClientHost* host = GetDevToolsClientHostFor(inspected_rvh);
- if (!host)
- return;
- UnbindClientHost(inspected_rvh, host);
- host->InspectedTabClosing();
-}
-
-void DevToolsManager::OnNavigatingToPendingEntry(RenderViewHost* rvh,
- RenderViewHost* dest_rvh,
- const GURL& gurl) {
- if (in_initial_show_) {
- // Mute this even in case it is caused by the initial show routines.
- return;
- }
-
- int cookie = DetachClientHost(rvh);
- if (cookie != -1) {
- // Navigating to URL in the inspected window.
- AttachClientHost(cookie, dest_rvh);
-
- DevToolsClientHost* client_host = GetDevToolsClientHostFor(dest_rvh);
- client_host->FrameNavigating(gurl.spec());
-
- return;
- }
-
- // Iterate over client hosts and if there is one that has render view host
- // changing, reopen entire client window (this must be caused by the user
- // manually refreshing its content).
- for (ClientHostToInspectedRvhMap::iterator it =
- client_host_to_inspected_rvh_.begin();
- it != client_host_to_inspected_rvh_.end(); ++it) {
- DevToolsWindow* window = it->first->AsDevToolsWindow();
- if (window && window->GetRenderViewHost() == rvh) {
- inspected_rvh_for_reopen_ = it->second;
- MessageLoop::current()->PostTask(FROM_HERE,
- NewRunnableMethod(this,
- &DevToolsManager::ForceReopenWindow));
- return;
- }
- }
-}
-
-void DevToolsManager::TabReplaced(TabContentsWrapper* old_tab,
- TabContentsWrapper* new_tab) {
- RenderViewHost* old_rvh = old_tab->tab_contents()->render_view_host();
- DevToolsClientHost* client_host = GetDevToolsClientHostFor(old_rvh);
- if (!client_host)
- return; // Didn't know about old_tab.
- int cookie = DetachClientHost(old_rvh);
- if (cookie == -1)
- return; // Didn't know about old_tab.
-
- client_host->TabReplaced(new_tab);
- AttachClientHost(cookie, new_tab->tab_contents()->render_view_host());
-}
-
-int DevToolsManager::DetachClientHost(RenderViewHost* from_rvh) {
- DevToolsClientHost* client_host = GetDevToolsClientHostFor(from_rvh);
- if (!client_host)
- return -1;
-
- int cookie = last_orphan_cookie_++;
- orphan_client_hosts_[cookie] =
- std::pair<DevToolsClientHost*, DevToolsRuntimeProperties>(
- client_host, runtime_properties_map_[from_rvh]);
-
- UnbindClientHost(from_rvh, client_host);
- return cookie;
-}
-
-void DevToolsManager::AttachClientHost(int client_host_cookie,
- RenderViewHost* to_rvh) {
- OrphanClientHosts::iterator it = orphan_client_hosts_.find(
- client_host_cookie);
- if (it == orphan_client_hosts_.end())
- return;
-
- DevToolsClientHost* client_host = (*it).second.first;
- BindClientHost(to_rvh, client_host, (*it).second.second);
- SendAttachToAgent(to_rvh);
-
- orphan_client_hosts_.erase(client_host_cookie);
-}
-
-void DevToolsManager::SendAttachToAgent(RenderViewHost* inspected_rvh) {
- if (inspected_rvh) {
- ChildProcessSecurityPolicy::GetInstance()->GrantReadRawCookies(
- inspected_rvh->process()->id());
-
- DevToolsRuntimeProperties properties;
- RuntimePropertiesMap::iterator it =
- runtime_properties_map_.find(inspected_rvh);
- if (it != runtime_properties_map_.end()) {
- properties = DevToolsRuntimeProperties(it->second.begin(),
- it->second.end());
- }
- IPC::Message* m = new DevToolsAgentMsg_Attach(properties);
- m->set_routing_id(inspected_rvh->routing_id());
- inspected_rvh->Send(m);
- }
-}
-
-void DevToolsManager::SendDetachToAgent(RenderViewHost* inspected_rvh) {
- if (inspected_rvh) {
- IPC::Message* m = new DevToolsAgentMsg_Detach();
- m->set_routing_id(inspected_rvh->routing_id());
- inspected_rvh->Send(m);
- }
-}
-
-void DevToolsManager::ForceReopenWindow() {
- if (inspected_rvh_for_reopen_) {
- RenderViewHost* inspected_rvn = inspected_rvh_for_reopen_;
- UnregisterDevToolsClientHostFor(inspected_rvn);
- OpenDevToolsWindow(inspected_rvn);
- }
-}
-
-DevToolsClientHost* DevToolsManager::FindOwnerDevToolsClientHost(
- RenderViewHost* client_rvh) {
- for (InspectedRvhToClientHostMap::iterator it =
- inspected_rvh_to_client_host_.begin();
- it != inspected_rvh_to_client_host_.end();
- ++it) {
- DevToolsWindow* win = it->second->AsDevToolsWindow();
- if (!win)
- continue;
- if (client_rvh == win->GetRenderViewHost())
- return it->second;
- }
- return NULL;
-}
-
-void DevToolsManager::ReopenWindow(RenderViewHost* client_rvh, bool docked) {
- DevToolsClientHost* client_host = FindOwnerDevToolsClientHost(client_rvh);
- if (!client_host)
- return;
- RenderViewHost* inspected_rvh = GetInspectedRenderViewHost(client_host);
- DCHECK(inspected_rvh);
- inspected_rvh->process()->profile()->GetPrefs()->SetBoolean(
- prefs::kDevToolsOpenDocked, docked);
-
- DevToolsWindow* window = client_host->AsDevToolsWindow();
- DCHECK(window);
- window->SetDocked(docked);
-}
-
-void DevToolsManager::ToggleDevToolsWindow(
- RenderViewHost* inspected_rvh,
- bool force_open,
- DevToolsToggleAction action) {
- bool do_open = force_open;
- DevToolsClientHost* host = GetDevToolsClientHostFor(inspected_rvh);
-
- if (host != NULL && host->AsDevToolsWindow() == NULL) {
- // Break remote debugging / extension debugging session.
- UnregisterDevToolsClientHostFor(inspected_rvh);
- host = NULL;
- }
-
- if (!host) {
- bool docked = inspected_rvh->process()->profile()->GetPrefs()->
- GetBoolean(prefs::kDevToolsOpenDocked);
- host = new DevToolsWindow(
- inspected_rvh->site_instance()->browsing_instance()->profile(),
- inspected_rvh,
- docked);
- RegisterDevToolsClientHostFor(inspected_rvh, host);
- do_open = true;
- }
-
- DevToolsWindow* window = host->AsDevToolsWindow();
- // If window is docked and visible, we hide it on toggle. If window is
- // undocked, we show (activate) it.
- if (!window->is_docked() || do_open) {
- AutoReset<bool> auto_reset_in_initial_show(&in_initial_show_, true);
- window->Show(action);
- } else {
- UnregisterDevToolsClientHostFor(inspected_rvh);
- }
-}
-
-void DevToolsManager::BindClientHost(
- RenderViewHost* inspected_rvh,
- DevToolsClientHost* client_host,
- const DevToolsRuntimeProperties& runtime_properties) {
- DCHECK(inspected_rvh_to_client_host_.find(inspected_rvh) ==
- inspected_rvh_to_client_host_.end());
- DCHECK(client_host_to_inspected_rvh_.find(client_host) ==
- client_host_to_inspected_rvh_.end());
-
- if (client_host_to_inspected_rvh_.empty()) {
- BrowserThread::PostTask(
- BrowserThread::IO,
- FROM_HERE,
- NewRunnableFunction(&DevToolsNetLogObserver::Attach,
- g_browser_process->io_thread()));
- }
- inspected_rvh_to_client_host_[inspected_rvh] = client_host;
- client_host_to_inspected_rvh_[client_host] = inspected_rvh;
- runtime_properties_map_[inspected_rvh] = runtime_properties;
-}
-
-void DevToolsManager::UnbindClientHost(RenderViewHost* inspected_rvh,
- DevToolsClientHost* client_host) {
- DCHECK(inspected_rvh_to_client_host_.find(inspected_rvh)->second ==
- client_host);
- DCHECK(client_host_to_inspected_rvh_.find(client_host)->second ==
- inspected_rvh);
-
- inspected_rvh_to_client_host_.erase(inspected_rvh);
- client_host_to_inspected_rvh_.erase(client_host);
- runtime_properties_map_.erase(inspected_rvh);
-
- if (client_host_to_inspected_rvh_.empty()) {
- BrowserThread::PostTask(
- BrowserThread::IO,
- FROM_HERE,
- NewRunnableFunction(&DevToolsNetLogObserver::Detach));
- }
- SendDetachToAgent(inspected_rvh);
- if (inspected_rvh_for_reopen_ == inspected_rvh)
- inspected_rvh_for_reopen_ = NULL;
-
- int process_id = inspected_rvh->process()->id();
- for (InspectedRvhToClientHostMap::iterator it =
- inspected_rvh_to_client_host_.begin();
- it != inspected_rvh_to_client_host_.end();
- ++it) {
- if (it->first->process()->id() == process_id)
- return;
- }
- // We've disconnected from the last renderer -> revoke cookie permissions.
- ChildProcessSecurityPolicy::GetInstance()->RevokeReadRawCookies(process_id);
-}
-
-void DevToolsManager::CloseAllClientHosts() {
- std::vector<RenderViewHost*> rhvs;
- for (InspectedRvhToClientHostMap::iterator it =
- inspected_rvh_to_client_host_.begin();
- it != inspected_rvh_to_client_host_.end(); ++it) {
- rhvs.push_back(it->first);
- }
- for (std::vector<RenderViewHost*>::iterator it = rhvs.begin();
- it != rhvs.end(); ++it) {
- UnregisterDevToolsClientHostFor(*it);
- }
-}

Powered by Google App Engine
This is Rietveld 408576698