summaryrefslogtreecommitdiffstats
path: root/chrome/browser/debugger/devtools_window.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/debugger/devtools_window.cc')
-rw-r--r--chrome/browser/debugger/devtools_window.cc74
1 files changed, 55 insertions, 19 deletions
diff --git a/chrome/browser/debugger/devtools_window.cc b/chrome/browser/debugger/devtools_window.cc
index fc74431..a185444 100644
--- a/chrome/browser/debugger/devtools_window.cc
+++ b/chrome/browser/debugger/devtools_window.cc
@@ -1,17 +1,22 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 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 "app/l10n_util.h"
#include "base/command_line.h"
+#include "base/json/json_writer.h"
+#include "base/string_number_conversions.h"
+#include "base/utf_string_conversions.h"
+#include "base/values.h"
#include "chrome/browser/browser.h"
#include "chrome/browser/browser_list.h"
#include "chrome/browser/browser_process.h"
-#include "chrome/browser/browser_theme_provider.h"
#include "chrome/browser/browser_window.h"
#include "chrome/browser/debugger/devtools_manager.h"
#include "chrome/browser/debugger/devtools_window.h"
-#include "chrome/browser/pref_service.h"
+#include "chrome/browser/extensions/extensions_service.h"
+#include "chrome/browser/in_process_webkit/session_storage_namespace.h"
+#include "chrome/browser/load_notification_details.h"
+#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/renderer_host/render_view_host.h"
#include "chrome/browser/tab_contents/navigation_controller.h"
@@ -19,6 +24,7 @@
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/tab_contents/tab_contents_view.h"
#include "chrome/browser/tabs/tab_strip_model.h"
+#include "chrome/browser/themes/browser_theme_provider.h"
#include "chrome/common/bindings_policy.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
@@ -26,7 +32,7 @@
#include "chrome/common/url_constants.h"
#include "grit/generated_resources.h"
-const std::wstring DevToolsWindow::kDevToolsApp = L"DevToolsApp";
+const char DevToolsWindow::kDevToolsApp[] = "DevToolsApp";
// static
TabContents* DevToolsWindow::GetDevToolsContents(TabContents* inspected_tab) {
@@ -59,7 +65,7 @@ DevToolsWindow::DevToolsWindow(Profile* profile,
is_loaded_(false),
action_on_load_(DEVTOOLS_TOGGLE_ACTION_NONE) {
// Create TabContents with devtools.
- tab_contents_ = new TabContents(profile, NULL, MSG_ROUTING_NONE, NULL);
+ tab_contents_ = new TabContents(profile, NULL, MSG_ROUTING_NONE, NULL, NULL);
tab_contents_->render_view_host()->AllowBindings(BindingsPolicy::DOM_UI);
tab_contents_->controller().LoadURL(
GetDevToolsUrl(), GURL(), PageTransition::START_PAGE);
@@ -133,13 +139,14 @@ void DevToolsWindow::Show(DevToolsToggleAction action) {
}
}
- if (!browser_)
- CreateDevToolsBrowser();
-
// Avoid consecutive window switching if the devtools window has been opened
// and the Inspect Element shortcut is pressed in the inspected tab.
bool should_show_window =
!browser_ || action != DEVTOOLS_TOGGLE_ACTION_INSPECT;
+
+ if (!browser_)
+ CreateDevToolsBrowser();
+
if (should_show_window)
browser_->window()->Show();
SetAttachedWindow();
@@ -194,9 +201,9 @@ RenderViewHost* DevToolsWindow::GetRenderViewHost() {
void DevToolsWindow::CreateDevToolsBrowser() {
// TODO(pfeldman): Make browser's getter for this key static.
- std::wstring wp_key = L"";
+ std::string wp_key;
wp_key.append(prefs::kBrowserWindowPlacement);
- wp_key.append(L"_");
+ wp_key.append("_");
wp_key.append(kDevToolsApp);
PrefService* prefs = g_browser_process->local_state();
@@ -207,12 +214,12 @@ void DevToolsWindow::CreateDevToolsBrowser() {
const DictionaryValue* wp_pref = prefs->GetDictionary(wp_key.c_str());
if (!wp_pref) {
DictionaryValue* defaults = prefs->GetMutableDictionary(wp_key.c_str());
- defaults->SetInteger(L"left", 100);
- defaults->SetInteger(L"top", 100);
- defaults->SetInteger(L"right", 740);
- defaults->SetInteger(L"bottom", 740);
- defaults->SetBoolean(L"maximized", false);
- defaults->SetBoolean(L"always_on_top", false);
+ defaults->SetInteger("left", 100);
+ defaults->SetInteger("top", 100);
+ defaults->SetInteger("right", 740);
+ defaults->SetInteger("bottom", 740);
+ defaults->SetBoolean("maximized", false);
+ defaults->SetBoolean("always_on_top", false);
}
browser_ = Browser::CreateForDevTools(profile_);
@@ -242,14 +249,43 @@ void DevToolsWindow::SetAttachedWindow() {
L"WebInspector.setAttachedWindow(false);");
}
+
+void DevToolsWindow::AddDevToolsExtensionsToClient() {
+ ListValue results;
+ const ExtensionsService* extension_service = tab_contents_->profile()->
+ GetOriginalProfile()->GetExtensionsService();
+ const ExtensionList* extensions = extension_service->extensions();
+
+ for (ExtensionList::const_iterator extension = extensions->begin();
+ extension != extensions->end(); ++extension) {
+ if ((*extension)->devtools_url().is_empty())
+ continue;
+ DictionaryValue* extension_info = new DictionaryValue();
+ extension_info->Set("startPage",
+ new StringValue((*extension)->devtools_url().spec()));
+ results.Append(extension_info);
+ }
+ CallClientFunction(L"WebInspector.addExtensions", results);
+}
+
+void DevToolsWindow::CallClientFunction(const std::wstring& function_name,
+ const Value& arg) {
+ std::string json;
+ base::JSONWriter::Write(&arg, false, &json);
+ std::wstring javascript = function_name + L"(" + UTF8ToWide(json) + L");";
+ tab_contents_->render_view_host()->
+ ExecuteJavascriptInWebFrame(L"", javascript);
+}
+
void DevToolsWindow::Observe(NotificationType type,
const NotificationSource& source,
const NotificationDetails& details) {
- if (type == NotificationType::LOAD_STOP) {
+ if (type == NotificationType::LOAD_STOP && !is_loaded_) {
SetAttachedWindow();
is_loaded_ = true;
UpdateTheme();
DoAction();
+ AddDevToolsExtensionsToClient();
} else if (type == NotificationType::TAB_CLOSING) {
if (Source<NavigationController>(source).ptr() ==
&tab_contents_->controller()) {
@@ -296,7 +332,7 @@ std::string SkColorToRGBAString(SkColor color) {
// locale specific formatters (e.g., use , instead of . in German).
return StringPrintf("rgba(%d,%d,%d,%s)", SkColorGetR(color),
SkColorGetG(color), SkColorGetB(color),
- DoubleToString(SkColorGetA(color) / 255.0).c_str());
+ base::DoubleToString(SkColorGetA(color) / 255.0).c_str());
}
GURL DevToolsWindow::GetDevToolsUrl() {