 Chromium Code Reviews
 Chromium Code Reviews Issue 379963002:
  [WIP] Make extension APIs work in devtools APIs when docked. 
  Base URL: svn://svn.chromium.org/chrome/trunk/src
    
  
    Issue 379963002:
  [WIP] Make extension APIs work in devtools APIs when docked. 
  Base URL: svn://svn.chromium.org/chrome/trunk/src| Index: chrome/browser/devtools/devtools_window.cc | 
| diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc | 
| index 2b072dda8438e8fdd27bb41bed444137b268a3aa..51fae2b568a376fc1411b7c6fc61c385dda696af 100644 | 
| --- a/chrome/browser/devtools/devtools_window.cc | 
| +++ b/chrome/browser/devtools/devtools_window.cc | 
| @@ -12,6 +12,7 @@ | 
| #include "base/time/time.h" | 
| #include "base/values.h" | 
| #include "chrome/browser/chrome_page_zoom.h" | 
| +#include "chrome/browser/extensions/chrome_extension_web_contents_observer.h" | 
| #include "chrome/browser/file_select_helper.h" | 
| #include "chrome/browser/infobars/infobar_service.h" | 
| #include "chrome/browser/prefs/pref_service_syncable.h" | 
| @@ -493,12 +494,16 @@ DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( | 
| content::RenderViewHost* inspected_rvh, | 
| bool force_open, | 
| const DevToolsToggleAction& action) { | 
| + LOG(INFO) << "Toggling devtools window"; | 
| + | 
| scoped_refptr<DevToolsAgentHost> agent( | 
| DevToolsAgentHost::GetOrCreateFor(inspected_rvh)); | 
| content::DevToolsManager* manager = content::DevToolsManager::GetInstance(); | 
| DevToolsWindow* window = FindDevToolsWindow(agent.get()); | 
| bool do_open = force_open; | 
| if (!window) { | 
| + LOG(INFO) << "No window"; | 
| + | 
| Profile* profile = Profile::FromBrowserContext( | 
| inspected_rvh->GetProcess()->GetBrowserContext()); | 
| content::RecordAction( | 
| @@ -509,6 +514,21 @@ DevToolsWindow* DevToolsWindow::ToggleDevToolsWindow( | 
| do_open = true; | 
| } | 
| + // Attach an extensions WebContentsObserver for the devtools API. | 
| + content::WebContents* web_contents = | 
| + content::WebContents::FromRenderViewHost(inspected_rvh); | 
| 
pfeldman
2014/07/10 13:44:36
I don't think inspected page contents should be in
 | 
| + if (web_contents) { | 
| + LOG(INFO) << "there is no web contents"; | 
| + extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( | 
| + web_contents); | 
| + } else { | 
| + LOG(INFO) << "extensions attached"; | 
| + } | 
| + | 
| + LOG(INFO) << "attaching to the blah blah"; | 
| + extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( | 
| + window->web_contents_for_test()); | 
| + | 
| // Update toolbar to reflect DevTools changes. | 
| window->UpdateBrowserToolbar(); | 
| @@ -708,10 +728,14 @@ DevToolsWindow::DevToolsWindow(Profile* profile, | 
| g_instances.Get().push_back(this); | 
| // There is no inspected_rvh in case of shared workers. | 
| - if (inspected_rvh) | 
| + if (inspected_rvh) { | 
| inspected_contents_observer_.reset(new ObserverWithAccessor( | 
| content::WebContents::FromRenderViewHost(inspected_rvh))); | 
| + } | 
| event_forwarder_.reset(new DevToolsEventForwarder(this)); | 
| + LOG(INFO) << "Creating function dispatcher for devtools window"; | 
| + extension_dispatcher_.reset( | 
| + new extensions::ExtensionFunctionDispatcher(profile, this)); | 
| } | 
| // static | 
| @@ -824,6 +848,10 @@ WebContents* DevToolsWindow::OpenURLFromTab( | 
| } | 
| void DevToolsWindow::ActivateContents(WebContents* contents) { | 
| + LOG(INFO) << "web contents activated"; | 
| + extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( | 
| 
pfeldman
2014/07/10 13:44:36
I don't think you want to do this here. Wiring the
 | 
| + contents); | 
| + | 
| if (is_docked_) { | 
| WebContents* inspected_tab = GetInspectedWebContents(); | 
| inspected_tab->GetDelegate()->ActivateContents(inspected_tab); | 
| @@ -838,6 +866,10 @@ void DevToolsWindow::AddNewContents(WebContents* source, | 
| const gfx::Rect& initial_pos, | 
| bool user_gesture, | 
| bool* was_blocked) { | 
| + LOG(INFO) << "web contents added"; | 
| + extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( | 
| 
pfeldman
2014/07/10 13:44:36
ditto.
 | 
| + new_contents); | 
| + | 
| if (new_contents == toolbox_web_contents_) { | 
| toolbox_web_contents_->SetDelegate( | 
| new DevToolsToolboxDelegate(toolbox_web_contents_, | 
| @@ -862,6 +894,10 @@ void DevToolsWindow::WebContentsCreated(WebContents* source_contents, | 
| const base::string16& frame_name, | 
| const GURL& target_url, | 
| WebContents* new_contents) { | 
| + LOG(INFO) << "web contents created on " << target_url; | 
| 
pfeldman
2014/07/10 13:44:35
ditto.
 | 
| + extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( | 
| + new_contents); | 
| + | 
| if (target_url.SchemeIs(content::kChromeDevToolsScheme) && | 
| target_url.query().find("toolbox=true") != std::string::npos) { | 
| CHECK(can_dock_); | 
| @@ -1139,6 +1175,19 @@ void DevToolsWindow::RenderProcessGone() { | 
| CloseContents(main_web_contents_); | 
| } | 
| +extensions::WindowController* DevToolsWindow::GetExtensionWindowController() | 
| + const { | 
| + return NULL; | 
| +} | 
| + | 
| +content::WebContents* DevToolsWindow::GetAssociatedWebContents() const { | 
| + return main_web_contents_; | 
| +} | 
| + | 
| +content::WebContents* DevToolsWindow::GetVisibleWebContents() const { | 
| + return main_web_contents_; | 
| +} | 
| + | 
| void DevToolsWindow::OnLoadCompleted() { | 
| // First seed inspected tab id for extension APIs. | 
| WebContents* inspected_web_contents = GetInspectedWebContents(); |