Index: chrome/browser/devtools/devtools_window.cc |
diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc |
index 3cc06c80db4400775cd56cb1628e4ac90f3c2278..5ba147bdc6fd9e0d181130e5cb58a5b5bbcc8697 100644 |
--- a/chrome/browser/devtools/devtools_window.cc |
+++ b/chrome/browser/devtools/devtools_window.cc |
@@ -7,6 +7,7 @@ |
#include <algorithm> |
#include "base/command_line.h" |
+#include "base/json/json_reader.h" |
#include "base/json/json_writer.h" |
#include "base/lazy_instance.h" |
#include "base/strings/string_number_conversions.h" |
@@ -14,6 +15,7 @@ |
#include "base/values.h" |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/chrome_notification_types.h" |
+#include "chrome/browser/devtools/list_value_parser.h" |
#include "chrome/browser/extensions/api/debugger/debugger_api.h" |
#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/extensions/extension_system.h" |
@@ -582,6 +584,46 @@ DevToolsWindow::DevToolsWindow(Profile* profile, |
if (inspected_rvh) |
inspected_contents_observer_.reset(new InspectedWebContentsObserver( |
content::WebContents::FromRenderViewHost(inspected_rvh))); |
+ |
+ RegisterFrontendMessageHandler("bringToFront", |
+ BindToListParser(base::Bind(&DevToolsWindow::ActivateWindow, |
+ base::Unretained(this)))); |
+ RegisterFrontendMessageHandler("closeWindow", |
+ BindToListParser(base::Bind(&DevToolsWindow::CloseWindow, |
+ base::Unretained(this)))); |
+ RegisterFrontendMessageHandler("moveWindowBy", |
+ BindToListParser(base::Bind(&DevToolsWindow::MoveWindow, |
+ base::Unretained(this)))); |
+ RegisterFrontendMessageHandler("requestSetDockSide", |
+ BindToListParser(base::Bind(&DevToolsWindow::SetDockSide, |
+ base::Unretained(this)))); |
+ RegisterFrontendMessageHandler("openInNewTab", |
+ BindToListParser(base::Bind(&DevToolsWindow::OpenInNewTab, |
+ base::Unretained(this)))); |
+ RegisterFrontendMessageHandler("save", |
+ BindToListParser(base::Bind(&DevToolsWindow::SaveToFile, |
+ base::Unretained(this)))); |
+ RegisterFrontendMessageHandler("append", |
+ BindToListParser(base::Bind(&DevToolsWindow::AppendToFile, |
+ base::Unretained(this)))); |
+ RegisterFrontendMessageHandler("requestFileSystems", |
+ BindToListParser(base::Bind(&DevToolsWindow::RequestFileSystems, |
+ base::Unretained(this)))); |
+ RegisterFrontendMessageHandler("addFileSystem", |
+ BindToListParser(base::Bind(&DevToolsWindow::AddFileSystem, |
+ base::Unretained(this)))); |
+ RegisterFrontendMessageHandler("removeFileSystem", |
+ BindToListParser(base::Bind(&DevToolsWindow::RemoveFileSystem, |
+ base::Unretained(this)))); |
+ RegisterFrontendMessageHandler("indexPath", |
+ BindToListParser(base::Bind(&DevToolsWindow::IndexPath, |
+ base::Unretained(this)))); |
+ RegisterFrontendMessageHandler("stopIndexing", |
+ BindToListParser(base::Bind(&DevToolsWindow::StopIndexing, |
+ base::Unretained(this)))); |
+ RegisterFrontendMessageHandler("searchInPath", |
+ BindToListParser(base::Bind(&DevToolsWindow::SearchInPath, |
+ base::Unretained(this)))); |
} |
// static |
@@ -822,6 +864,45 @@ void DevToolsWindow::WebContentsFocused(content::WebContents* contents) { |
inspected_browser->window()->WebContentsFocused(contents); |
} |
+static const char kFrontendHostMethod[] = "method"; |
+static const char kFrontendHostParams[] = "params"; |
+ |
+void DevToolsWindow::DispatchOnFrontendHost(const std::string& message) { |
+ std::string method; |
+ base::ListValue empty_params; |
+ base::ListValue* params = &empty_params; |
+ |
+ base::DictionaryValue* dict; |
+ scoped_ptr<base::Value> parsed_message(base::JSONReader::Read(message)); |
+ if (!parsed_message || |
+ !parsed_message->GetAsDictionary(&dict) || |
+ !dict->GetString(kFrontendHostMethod, &method) || |
+ (dict->HasKey(kFrontendHostParams) && |
+ !dict->GetList(kFrontendHostParams, ¶ms))) { |
+ LOG(ERROR) << "Cannot parse frontend host message: " << message; |
+ return; |
+ } |
+ |
+ FrontendMessageHandlerMap::iterator it = |
+ frontend_message_handlers_.find(method); |
+ if (it == frontend_message_handlers_.end()) { |
+ LOG(ERROR) << "Unsupported frontend host method: " << message; |
+ return; |
+ } |
+ |
+ if (!it->second.Run(*params)) { |
+ LOG(ERROR) << "Invalid frontend host message parameters: " << message; |
+ } else { |
+ LOG(ERROR) << "DevToolsWindow dispatched: " << message; |
+ } |
+} |
+ |
+void DevToolsWindow::RegisterFrontendMessageHandler( |
+ const std::string& method, |
+ const FrontendMessageHandler& handler) { |
+ frontend_message_handlers_[method] = handler; |
+} |
+ |
void DevToolsWindow::ActivateWindow() { |
if (IsDocked() && GetInspectedBrowserWindow()) |
web_contents_->GetView()->Focus(); |
@@ -829,10 +910,6 @@ void DevToolsWindow::ActivateWindow() { |
browser_->window()->Activate(); |
} |
-void DevToolsWindow::ChangeAttachedWindowHeight(unsigned height) { |
- NOTREACHED(); // TODO(dgozman): This is not used anymore, remove. |
-} |
- |
void DevToolsWindow::CloseWindow() { |
DCHECK(IsDocked()); |
content::DevToolsManager::GetInstance()->ClientHostClosing( |