Index: chrome/browser/ui/webui/workers_ui.cc |
diff --git a/chrome/browser/ui/webui/workers_ui.cc b/chrome/browser/ui/webui/workers_ui.cc |
deleted file mode 100644 |
index 0e7dff7a41d6c2ebcb5b5b898112396fd0d4e9c9..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/webui/workers_ui.cc |
+++ /dev/null |
@@ -1,271 +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 "chrome/browser/ui/webui/workers_ui.h" |
- |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/json/json_writer.h" |
-#include "base/memory/ref_counted_memory.h" |
-#include "base/string_number_conversions.h" |
-#include "base/string_util.h" |
-#include "base/values.h" |
-#include "chrome/browser/debugger/devtools_window.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/ui/webui/chrome_url_data_manager_backend.h" |
-#include "chrome/browser/ui/webui/chrome_web_ui_data_source.h" |
-#include "chrome/common/url_constants.h" |
-#include "content/public/browser/child_process_data.h" |
-#include "content/public/browser/devtools_agent_host_registry.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/browser/web_ui.h" |
-#include "content/public/browser/worker_service.h" |
-#include "content/public/browser/worker_service_observer.h" |
-#include "content/public/browser/web_ui_message_handler.h" |
-#include "content/public/common/process_type.h" |
-#include "grit/generated_resources.h" |
-#include "grit/workers_resources.h" |
-#include "ui/base/resource/resource_bundle.h" |
- |
-using content::BrowserThread; |
-using content::ChildProcessData; |
-using content::DevToolsAgentHost; |
-using content::DevToolsAgentHostRegistry; |
-using content::WebContents; |
-using content::WebUIMessageHandler; |
-using content::WorkerService; |
-using content::WorkerServiceObserver; |
- |
-static const char kWorkersDataFile[] = "workers_data.json"; |
- |
-static const char kOpenDevToolsCommand[] = "openDevTools"; |
-static const char kTerminateWorkerCommand[] = "terminateWorker"; |
- |
-static const char kWorkerProcessHostIdField[] = "workerProcessHostId"; |
-static const char kWorkerRouteIdField[] = "workerRouteId"; |
-static const char kUrlField[] = "url"; |
-static const char kNameField[] = "name"; |
-static const char kPidField[] = "pid"; |
- |
-namespace { |
- |
- |
-DictionaryValue* BuildWorkerData( |
- const GURL& url, |
- const string16& name, |
- int process_id, |
- int route_id, |
- base::ProcessHandle handle) { |
- DictionaryValue* worker_data = new DictionaryValue(); |
- worker_data->SetInteger(kWorkerProcessHostIdField, process_id); |
- worker_data->SetInteger(kWorkerRouteIdField, route_id); |
- worker_data->SetString(kUrlField, url.spec()); |
- worker_data->SetString(kNameField, name); |
- worker_data->SetInteger(kPidField, base::GetProcId(handle)); |
- return worker_data; |
-} |
- |
-class WorkersUIHTMLSource : public ChromeWebUIDataSource { |
- public: |
- WorkersUIHTMLSource(); |
- |
- virtual void StartDataRequest(const std::string& path, |
- bool is_incognito, |
- int request_id); |
- private: |
- ~WorkersUIHTMLSource() {} |
- void SendSharedWorkersData(int request_id); |
- DISALLOW_COPY_AND_ASSIGN(WorkersUIHTMLSource); |
-}; |
- |
-WorkersUIHTMLSource::WorkersUIHTMLSource() |
- : ChromeWebUIDataSource(chrome::kChromeUIWorkersHost, NULL) { |
- add_resource_path("workers.js", IDR_WORKERS_INDEX_JS); |
- set_default_resource(IDR_WORKERS_INDEX_HTML); |
-} |
- |
-void WorkersUIHTMLSource::StartDataRequest(const std::string& path, |
- bool is_incognito, |
- int request_id) { |
- if (path == kWorkersDataFile) { |
- SendSharedWorkersData(request_id); |
- } else { |
- ChromeWebUIDataSource::StartDataRequest(path, is_incognito, request_id); |
- } |
-} |
- |
-void WorkersUIHTMLSource::SendSharedWorkersData(int request_id) { |
- ListValue workers_list; |
- std::vector<WorkerService::WorkerInfo> worker_info = |
- WorkerService::GetInstance()->GetWorkers(); |
- for (size_t i = 0; i < worker_info.size(); ++i) { |
- workers_list.Append(BuildWorkerData( |
- worker_info[i].url, worker_info[i].name, worker_info[i].process_id, |
- worker_info[i].route_id, worker_info[i].handle)); |
- } |
- |
- std::string json_string; |
- base::JSONWriter::Write(&workers_list, &json_string); |
- |
- SendResponse(request_id, base::RefCountedString::TakeString(&json_string)); |
-} |
- |
-class WorkersDOMHandler : public WebUIMessageHandler { |
- public: |
- WorkersDOMHandler() {} |
- virtual ~WorkersDOMHandler() {} |
- |
- private: |
- // WebUIMessageHandler implementation. |
- virtual void RegisterMessages() OVERRIDE; |
- |
- // Callback for "openDevTools" message. |
- void HandleOpenDevTools(const ListValue* args); |
- void HandleTerminateWorker(const ListValue* args); |
- |
- DISALLOW_COPY_AND_ASSIGN(WorkersDOMHandler); |
-}; |
- |
-void WorkersDOMHandler::RegisterMessages() { |
- web_ui()->RegisterMessageCallback(kOpenDevToolsCommand, |
- base::Bind(&WorkersDOMHandler::HandleOpenDevTools, |
- base::Unretained(this))); |
- web_ui()->RegisterMessageCallback(kTerminateWorkerCommand, |
- base::Bind(&WorkersDOMHandler::HandleTerminateWorker, |
- base::Unretained(this))); |
-} |
- |
-void WorkersDOMHandler::HandleOpenDevTools(const ListValue* args) { |
- std::string worker_process_host_id_str; |
- std::string worker_route_id_str; |
- int worker_process_host_id; |
- int worker_route_id; |
- CHECK(args->GetSize() == 2); |
- CHECK(args->GetString(0, &worker_process_host_id_str)); |
- CHECK(args->GetString(1, &worker_route_id_str)); |
- CHECK(base::StringToInt(worker_process_host_id_str, |
- &worker_process_host_id)); |
- CHECK(base::StringToInt(worker_route_id_str, &worker_route_id)); |
- |
- Profile* profile = Profile::FromWebUI(web_ui()); |
- if (!profile) |
- return; |
- DevToolsAgentHost* agent_host = |
- DevToolsAgentHostRegistry::GetDevToolsAgentHostForWorker( |
- worker_process_host_id, |
- worker_route_id); |
- DevToolsWindow::OpenDevToolsWindowForWorker(profile, agent_host); |
-} |
- |
-static void TerminateWorker(int process_id, int route_id) { |
- WorkerService::GetInstance()->TerminateWorker(process_id, route_id); |
-} |
- |
-void WorkersDOMHandler::HandleTerminateWorker(const ListValue* args) { |
- std::string worker_process_host_id_str; |
- std::string worker_route_id_str; |
- int worker_process_host_id; |
- int worker_route_id; |
- CHECK(args->GetSize() == 2); |
- CHECK(args->GetString(0, &worker_process_host_id_str)); |
- CHECK(args->GetString(1, &worker_route_id_str)); |
- CHECK(base::StringToInt(worker_process_host_id_str, |
- &worker_process_host_id)); |
- CHECK(base::StringToInt(worker_route_id_str, &worker_route_id)); |
- |
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
- base::Bind(&TerminateWorker, worker_process_host_id, worker_route_id)); |
-} |
- |
-} // namespace |
- |
-class WorkersUI::WorkerCreationDestructionListener |
- : public WorkerServiceObserver, |
- public base::RefCountedThreadSafe<WorkerCreationDestructionListener> { |
- public: |
- explicit WorkerCreationDestructionListener(WorkersUI* workers_ui) |
- : workers_ui_(workers_ui) { |
- BrowserThread::PostTask( |
- BrowserThread::IO, FROM_HERE, |
- base::Bind(&WorkerCreationDestructionListener::RegisterObserver, |
- this)); |
- } |
- |
- void WorkersUIDestroyed() { |
- workers_ui_ = NULL; |
- BrowserThread::PostTask( |
- BrowserThread::IO, FROM_HERE, |
- base::Bind(&WorkerCreationDestructionListener::UnregisterObserver, |
- this)); |
- } |
- |
- private: |
- friend class base::RefCountedThreadSafe<WorkerCreationDestructionListener>; |
- virtual ~WorkerCreationDestructionListener() { |
- } |
- |
- virtual void WorkerCreated( |
- const GURL& url, |
- const string16& name, |
- int process_id, |
- int route_id) OVERRIDE { |
- BrowserThread::PostTask( |
- BrowserThread::UI, FROM_HERE, |
- base::Bind(&WorkerCreationDestructionListener::NotifyWorkerCreated, |
- this, |
- base::Owned(BuildWorkerData(url, name, process_id, route_id, |
- base::kNullProcessHandle)))); |
- } |
- virtual void WorkerDestroyed(int process_id, int route_id) OVERRIDE { |
- DictionaryValue* worker_data = new DictionaryValue(); |
- worker_data->SetInteger(kWorkerProcessHostIdField, process_id); |
- worker_data->SetInteger(kWorkerRouteIdField, route_id); |
- |
- BrowserThread::PostTask( |
- BrowserThread::UI, FROM_HERE, |
- base::Bind(&WorkerCreationDestructionListener::NotifyWorkerDestroyed, |
- this, base::Owned(worker_data))); |
- } |
- |
- void NotifyWorkerCreated(DictionaryValue* worker_data) { |
- if (workers_ui_) { |
- workers_ui_->web_ui()->CallJavascriptFunction( |
- "workerCreated", *worker_data); |
- } |
- } |
- |
- void NotifyWorkerDestroyed(DictionaryValue* worker_data) { |
- if (workers_ui_) { |
- workers_ui_->web_ui()->CallJavascriptFunction( |
- "workerDestroyed", *worker_data); |
- } |
- } |
- |
- void RegisterObserver() { |
- WorkerService::GetInstance()->AddObserver(this); |
- } |
- void UnregisterObserver() { |
- WorkerService::GetInstance()->RemoveObserver(this); |
- } |
- |
- WorkersUI* workers_ui_; |
-}; |
- |
-WorkersUI::WorkersUI(content::WebUI* web_ui) |
- : WebUIController(web_ui), |
- observer_(new WorkerCreationDestructionListener(this)){ |
- web_ui->AddMessageHandler(new WorkersDOMHandler()); |
- |
- WorkersUIHTMLSource* html_source = new WorkersUIHTMLSource(); |
- |
- // Set up the chrome://workers/ source. |
- Profile* profile = Profile::FromWebUI(web_ui); |
- profile->GetChromeURLDataManager()->AddDataSource(html_source); |
-} |
- |
-WorkersUI::~WorkersUI() { |
- observer_->WorkersUIDestroyed(); |
- observer_ = NULL; |
-} |