| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/workers_ui.h" | 5 #include "chrome/browser/ui/webui/workers_ui.h" |
| 6 | 6 |
| 7 #include "base/json/json_writer.h" | 7 #include "base/json/json_writer.h" |
| 8 #include "base/memory/ref_counted_memory.h" | 8 #include "base/memory/ref_counted_memory.h" |
| 9 #include "base/string_number_conversions.h" |
| 9 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| 10 #include "base/values.h" | 11 #include "base/values.h" |
| 11 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
| 12 #include "chrome/browser/ui/webui/chrome_url_data_manager_backend.h" | 13 #include "chrome/browser/ui/webui/chrome_url_data_manager_backend.h" |
| 13 #include "chrome/browser/ui/webui/chrome_web_ui_data_source.h" | 14 #include "chrome/browser/ui/webui/chrome_web_ui_data_source.h" |
| 14 #include "chrome/common/url_constants.h" | 15 #include "chrome/common/url_constants.h" |
| 16 #include "content/browser/debugger/worker_devtools_manager.h" |
| 15 #include "content/browser/tab_contents/tab_contents.h" | 17 #include "content/browser/tab_contents/tab_contents.h" |
| 16 #include "content/browser/worker_host/worker_process_host.h" | 18 #include "content/browser/worker_host/worker_process_host.h" |
| 19 #include "content/common/devtools_messages.h" |
| 17 #include "grit/generated_resources.h" | 20 #include "grit/generated_resources.h" |
| 18 #include "grit/workers_resources.h" | 21 #include "grit/workers_resources.h" |
| 19 #include "ui/base/resource/resource_bundle.h" | 22 #include "ui/base/resource/resource_bundle.h" |
| 20 | 23 |
| 21 static const char kWorkersDataFile[] = "workers_data.json"; | 24 static const char kWorkersDataFile[] = "workers_data.json"; |
| 22 static const char kIndexHtmlFile[] = "index.html"; | 25 static const char kIndexHtmlFile[] = "index.html"; |
| 23 | 26 |
| 24 namespace { | 27 namespace { |
| 25 | 28 |
| 26 class WorkersUIHTMLSource : public ChromeURLDataManager::DataSource { | 29 class WorkersUIHTMLSource : public ChromeURLDataManager::DataSource { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 ListValue workers_list; | 75 ListValue workers_list; |
| 73 BrowserChildProcessHost::Iterator iter(ChildProcessInfo::WORKER_PROCESS); | 76 BrowserChildProcessHost::Iterator iter(ChildProcessInfo::WORKER_PROCESS); |
| 74 for (; !iter.Done(); ++iter) { | 77 for (; !iter.Done(); ++iter) { |
| 75 WorkerProcessHost* worker = static_cast<WorkerProcessHost*>(*iter); | 78 WorkerProcessHost* worker = static_cast<WorkerProcessHost*>(*iter); |
| 76 const WorkerProcessHost::Instances& instances = worker->instances(); | 79 const WorkerProcessHost::Instances& instances = worker->instances(); |
| 77 for (WorkerProcessHost::Instances::const_iterator i = instances.begin(); | 80 for (WorkerProcessHost::Instances::const_iterator i = instances.begin(); |
| 78 i != instances.end(); ++i) { | 81 i != instances.end(); ++i) { |
| 79 if (!i->shared()) | 82 if (!i->shared()) |
| 80 continue; | 83 continue; |
| 81 DictionaryValue* worker_data = new DictionaryValue(); | 84 DictionaryValue* worker_data = new DictionaryValue(); |
| 82 worker_data->SetInteger("id", i->worker_route_id()); | 85 worker_data->SetInteger("workerProcessHostId", worker->id()); |
| 86 worker_data->SetInteger("workerRouteId", i->worker_route_id()); |
| 83 worker_data->SetString("url", i->url().spec()); | 87 worker_data->SetString("url", i->url().spec()); |
| 84 worker_data->SetString("name", i->name()); | 88 worker_data->SetString("name", i->name()); |
| 85 worker_data->SetInteger("pid", worker->pid()); | 89 worker_data->SetInteger("pid", worker->pid()); |
| 86 workers_list.Append(worker_data); | 90 workers_list.Append(worker_data); |
| 87 } | 91 } |
| 88 } | 92 } |
| 89 | 93 |
| 90 std::string json_string; | 94 std::string json_string; |
| 91 base::JSONWriter::Write(&workers_list, false, &json_string); | 95 base::JSONWriter::Write(&workers_list, false, &json_string); |
| 92 | 96 |
| 93 scoped_refptr<RefCountedBytes> json_bytes(new RefCountedBytes()); | 97 scoped_refptr<RefCountedBytes> json_bytes(new RefCountedBytes()); |
| 94 json_bytes->data.resize(json_string.size()); | 98 json_bytes->data.resize(json_string.size()); |
| 95 std::copy(json_string.begin(), json_string.end(), json_bytes->data.begin()); | 99 std::copy(json_string.begin(), json_string.end(), json_bytes->data.begin()); |
| 96 | 100 |
| 97 SendResponse(request_id, json_bytes); | 101 SendResponse(request_id, json_bytes); |
| 98 } | 102 } |
| 99 | 103 |
| 104 class WorkersDOMHandler : public WebUIMessageHandler { |
| 105 public: |
| 106 WorkersDOMHandler() {} |
| 107 virtual ~WorkersDOMHandler() {} |
| 108 |
| 109 private: |
| 110 // WebUIMessageHandler implementation. |
| 111 virtual void RegisterMessages(); |
| 112 |
| 113 // Callback for "openDevTools" message. |
| 114 void HandleOpenDevTools(const ListValue* args); |
| 115 |
| 116 DISALLOW_COPY_AND_ASSIGN(WorkersDOMHandler); |
| 117 }; |
| 118 |
| 119 void WorkersDOMHandler::RegisterMessages() { |
| 120 web_ui_->RegisterMessageCallback("openDevTools", |
| 121 NewCallback(this, &WorkersDOMHandler::HandleOpenDevTools)); |
| 122 } |
| 123 |
| 124 static void OpenDevToolsOnIOThread(int worker_process_host_id, |
| 125 int worker_route_id) { |
| 126 WorkerDevToolsManager::GetInstance()->OpenDevToolsForWorker( |
| 127 worker_process_host_id, worker_route_id); |
| 128 } |
| 129 |
| 130 void WorkersDOMHandler::HandleOpenDevTools(const ListValue* args) { |
| 131 std::string worker_process_host_id_str; |
| 132 std::string worker_route_id_str; |
| 133 int worker_process_host_id; |
| 134 int worker_route_id; |
| 135 CHECK(args->GetSize() == 2); |
| 136 CHECK(args->GetString(0, &worker_process_host_id_str)); |
| 137 CHECK(args->GetString(1, &worker_route_id_str)); |
| 138 CHECK(base::StringToInt(worker_process_host_id_str, |
| 139 &worker_process_host_id)); |
| 140 CHECK(base::StringToInt(worker_route_id_str, &worker_route_id)); |
| 141 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, NewRunnableFunction( |
| 142 &OpenDevToolsOnIOThread, worker_process_host_id, worker_route_id)); |
| 143 } |
| 144 |
| 100 } // namespace | 145 } // namespace |
| 101 | 146 |
| 102 WorkersUI::WorkersUI(TabContents* contents) : ChromeWebUI(contents) { | 147 WorkersUI::WorkersUI(TabContents* contents) : ChromeWebUI(contents) { |
| 148 WorkersDOMHandler* handler = new WorkersDOMHandler(); |
| 149 AddMessageHandler(handler); |
| 150 handler->Attach(this); |
| 151 |
| 103 WorkersUIHTMLSource* html_source = new WorkersUIHTMLSource(); | 152 WorkersUIHTMLSource* html_source = new WorkersUIHTMLSource(); |
| 104 | 153 |
| 105 // Set up the chrome://workers/ source. | 154 // Set up the chrome://workers/ source. |
| 106 contents->profile()->GetChromeURLDataManager()->AddDataSource(html_source); | 155 contents->profile()->GetChromeURLDataManager()->AddDataSource(html_source); |
| 107 } | 156 } |
| OLD | NEW |