| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/cancelable_callback.h" | 6 #include "base/cancelable_callback.h" |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 public: | 63 public: |
| 64 explicit BrowserClosedObserver(Browser* browser) { | 64 explicit BrowserClosedObserver(Browser* browser) { |
| 65 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_CLOSED, | 65 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_CLOSED, |
| 66 content::Source<Browser>(browser)); | 66 content::Source<Browser>(browser)); |
| 67 content::RunMessageLoop(); | 67 content::RunMessageLoop(); |
| 68 } | 68 } |
| 69 | 69 |
| 70 virtual void Observe(int type, | 70 virtual void Observe(int type, |
| 71 const content::NotificationSource& source, | 71 const content::NotificationSource& source, |
| 72 const content::NotificationDetails& details) OVERRIDE { | 72 const content::NotificationDetails& details) OVERRIDE { |
| 73 MessageLoopForUI::current()->Quit(); | 73 base::MessageLoopForUI::current()->Quit(); |
| 74 } | 74 } |
| 75 | 75 |
| 76 private: | 76 private: |
| 77 content::NotificationRegistrar registrar_; | 77 content::NotificationRegistrar registrar_; |
| 78 DISALLOW_COPY_AND_ASSIGN(BrowserClosedObserver); | 78 DISALLOW_COPY_AND_ASSIGN(BrowserClosedObserver); |
| 79 }; | 79 }; |
| 80 | 80 |
| 81 // The delay waited in some cases where we don't have a notifications for an | 81 // The delay waited in some cases where we don't have a notifications for an |
| 82 // action we take. | 82 // action we take. |
| 83 const int kActionDelayMs = 500; | 83 const int kActionDelayMs = 500; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 if (browser) | 164 if (browser) |
| 165 BrowserClosedObserver close_observer(browser); | 165 BrowserClosedObserver close_observer(browser); |
| 166 } | 166 } |
| 167 | 167 |
| 168 DevToolsWindow* window_; | 168 DevToolsWindow* window_; |
| 169 RenderViewHost* inspected_rvh_; | 169 RenderViewHost* inspected_rvh_; |
| 170 }; | 170 }; |
| 171 | 171 |
| 172 void TimeoutCallback(const std::string& timeout_message) { | 172 void TimeoutCallback(const std::string& timeout_message) { |
| 173 FAIL() << timeout_message; | 173 FAIL() << timeout_message; |
| 174 MessageLoop::current()->Quit(); | 174 base::MessageLoop::current()->Quit(); |
| 175 } | 175 } |
| 176 | 176 |
| 177 // Base class for DevTools tests that test devtools functionality for | 177 // Base class for DevTools tests that test devtools functionality for |
| 178 // extensions and content scripts. | 178 // extensions and content scripts. |
| 179 class DevToolsExtensionTest : public DevToolsSanityTest, | 179 class DevToolsExtensionTest : public DevToolsSanityTest, |
| 180 public content::NotificationObserver { | 180 public content::NotificationObserver { |
| 181 public: | 181 public: |
| 182 DevToolsExtensionTest() : DevToolsSanityTest() { | 182 DevToolsExtensionTest() : DevToolsSanityTest() { |
| 183 PathService::Get(chrome::DIR_TEST_DATA, &test_extensions_dir_); | 183 PathService::Get(chrome::DIR_TEST_DATA, &test_extensions_dir_); |
| 184 test_extensions_dir_ = test_extensions_dir_.AppendASCII("devtools"); | 184 test_extensions_dir_ = test_extensions_dir_.AppendASCII("devtools"); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 196 bool LoadExtensionFromPath(const base::FilePath& path) { | 196 bool LoadExtensionFromPath(const base::FilePath& path) { |
| 197 ExtensionService* service = extensions::ExtensionSystem::Get( | 197 ExtensionService* service = extensions::ExtensionSystem::Get( |
| 198 browser()->profile())->extension_service(); | 198 browser()->profile())->extension_service(); |
| 199 size_t num_before = service->extensions()->size(); | 199 size_t num_before = service->extensions()->size(); |
| 200 { | 200 { |
| 201 content::NotificationRegistrar registrar; | 201 content::NotificationRegistrar registrar; |
| 202 registrar.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, | 202 registrar.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, |
| 203 content::NotificationService::AllSources()); | 203 content::NotificationService::AllSources()); |
| 204 base::CancelableClosure timeout( | 204 base::CancelableClosure timeout( |
| 205 base::Bind(&TimeoutCallback, "Extension load timed out.")); | 205 base::Bind(&TimeoutCallback, "Extension load timed out.")); |
| 206 MessageLoop::current()->PostDelayedTask( | 206 base::MessageLoop::current()->PostDelayedTask( |
| 207 FROM_HERE, timeout.callback(), base::TimeDelta::FromSeconds(4)); | 207 FROM_HERE, timeout.callback(), base::TimeDelta::FromSeconds(4)); |
| 208 extensions::UnpackedInstaller::Create(service)->Load(path); | 208 extensions::UnpackedInstaller::Create(service)->Load(path); |
| 209 content::RunMessageLoop(); | 209 content::RunMessageLoop(); |
| 210 timeout.Cancel(); | 210 timeout.Cancel(); |
| 211 } | 211 } |
| 212 size_t num_after = service->extensions()->size(); | 212 size_t num_after = service->extensions()->size(); |
| 213 if (num_after != (num_before + 1)) | 213 if (num_after != (num_before + 1)) |
| 214 return false; | 214 return false; |
| 215 | 215 |
| 216 return WaitForExtensionViewsToLoad(); | 216 return WaitForExtensionViewsToLoad(); |
| 217 } | 217 } |
| 218 | 218 |
| 219 bool WaitForExtensionViewsToLoad() { | 219 bool WaitForExtensionViewsToLoad() { |
| 220 // Wait for all the extension render views that exist to finish loading. | 220 // Wait for all the extension render views that exist to finish loading. |
| 221 // NOTE: This assumes that the extension views list is not changing while | 221 // NOTE: This assumes that the extension views list is not changing while |
| 222 // this method is running. | 222 // this method is running. |
| 223 | 223 |
| 224 content::NotificationRegistrar registrar; | 224 content::NotificationRegistrar registrar; |
| 225 registrar.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING, | 225 registrar.Add(this, chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING, |
| 226 content::NotificationService::AllSources()); | 226 content::NotificationService::AllSources()); |
| 227 base::CancelableClosure timeout( | 227 base::CancelableClosure timeout( |
| 228 base::Bind(&TimeoutCallback, "Extension host load timed out.")); | 228 base::Bind(&TimeoutCallback, "Extension host load timed out.")); |
| 229 MessageLoop::current()->PostDelayedTask( | 229 base::MessageLoop::current()->PostDelayedTask( |
| 230 FROM_HERE, timeout.callback(), base::TimeDelta::FromSeconds(4)); | 230 FROM_HERE, timeout.callback(), base::TimeDelta::FromSeconds(4)); |
| 231 | 231 |
| 232 ExtensionProcessManager* manager = | 232 ExtensionProcessManager* manager = |
| 233 extensions::ExtensionSystem::Get(browser()->profile())-> | 233 extensions::ExtensionSystem::Get(browser()->profile())-> |
| 234 process_manager(); | 234 process_manager(); |
| 235 ExtensionProcessManager::ViewSet all_views = manager->GetAllViews(); | 235 ExtensionProcessManager::ViewSet all_views = manager->GetAllViews(); |
| 236 for (ExtensionProcessManager::ViewSet::const_iterator iter = | 236 for (ExtensionProcessManager::ViewSet::const_iterator iter = |
| 237 all_views.begin(); | 237 all_views.begin(); |
| 238 iter != all_views.end();) { | 238 iter != all_views.end();) { |
| 239 if (!(*iter)->IsLoading()) | 239 if (!(*iter)->IsLoading()) |
| 240 ++iter; | 240 ++iter; |
| 241 else | 241 else |
| 242 content::RunMessageLoop(); | 242 content::RunMessageLoop(); |
| 243 } | 243 } |
| 244 | 244 |
| 245 timeout.Cancel(); | 245 timeout.Cancel(); |
| 246 return true; | 246 return true; |
| 247 } | 247 } |
| 248 | 248 |
| 249 virtual void Observe(int type, | 249 virtual void Observe(int type, |
| 250 const content::NotificationSource& source, | 250 const content::NotificationSource& source, |
| 251 const content::NotificationDetails& details) OVERRIDE { | 251 const content::NotificationDetails& details) OVERRIDE { |
| 252 switch (type) { | 252 switch (type) { |
| 253 case chrome::NOTIFICATION_EXTENSION_LOADED: | 253 case chrome::NOTIFICATION_EXTENSION_LOADED: |
| 254 case chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING: | 254 case chrome::NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING: |
| 255 MessageLoopForUI::current()->Quit(); | 255 base::MessageLoopForUI::current()->Quit(); |
| 256 break; | 256 break; |
| 257 default: | 257 default: |
| 258 NOTREACHED(); | 258 NOTREACHED(); |
| 259 break; | 259 break; |
| 260 } | 260 } |
| 261 } | 261 } |
| 262 | 262 |
| 263 base::FilePath test_extensions_dir_; | 263 base::FilePath test_extensions_dir_; |
| 264 }; | 264 }; |
| 265 | 265 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 | 297 |
| 298 virtual void WorkerCreated ( | 298 virtual void WorkerCreated ( |
| 299 const GURL& url, | 299 const GURL& url, |
| 300 const string16& name, | 300 const string16& name, |
| 301 int process_id, | 301 int process_id, |
| 302 int route_id) OVERRIDE { | 302 int route_id) OVERRIDE { |
| 303 worker_data_->worker_process_id = process_id; | 303 worker_data_->worker_process_id = process_id; |
| 304 worker_data_->worker_route_id = route_id; | 304 worker_data_->worker_route_id = route_id; |
| 305 WorkerService::GetInstance()->RemoveObserver(this); | 305 WorkerService::GetInstance()->RemoveObserver(this); |
| 306 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 306 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 307 MessageLoop::QuitClosure()); | 307 base::MessageLoop::QuitClosure()); |
| 308 delete this; | 308 delete this; |
| 309 } | 309 } |
| 310 scoped_refptr<WorkerData> worker_data_; | 310 scoped_refptr<WorkerData> worker_data_; |
| 311 }; | 311 }; |
| 312 | 312 |
| 313 class WorkerTerminationObserver : public WorkerServiceObserver { | 313 class WorkerTerminationObserver : public WorkerServiceObserver { |
| 314 public: | 314 public: |
| 315 explicit WorkerTerminationObserver(WorkerData* worker_data) | 315 explicit WorkerTerminationObserver(WorkerData* worker_data) |
| 316 : worker_data_(worker_data) { | 316 : worker_data_(worker_data) { |
| 317 } | 317 } |
| 318 | 318 |
| 319 private: | 319 private: |
| 320 virtual ~WorkerTerminationObserver() {} | 320 virtual ~WorkerTerminationObserver() {} |
| 321 | 321 |
| 322 virtual void WorkerDestroyed(int process_id, int route_id) OVERRIDE { | 322 virtual void WorkerDestroyed(int process_id, int route_id) OVERRIDE { |
| 323 ASSERT_EQ(worker_data_->worker_process_id, process_id); | 323 ASSERT_EQ(worker_data_->worker_process_id, process_id); |
| 324 ASSERT_EQ(worker_data_->worker_route_id, route_id); | 324 ASSERT_EQ(worker_data_->worker_route_id, route_id); |
| 325 WorkerService::GetInstance()->RemoveObserver(this); | 325 WorkerService::GetInstance()->RemoveObserver(this); |
| 326 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 326 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 327 MessageLoop::QuitClosure()); | 327 base::MessageLoop::QuitClosure()); |
| 328 delete this; | 328 delete this; |
| 329 } | 329 } |
| 330 scoped_refptr<WorkerData> worker_data_; | 330 scoped_refptr<WorkerData> worker_data_; |
| 331 }; | 331 }; |
| 332 | 332 |
| 333 void RunTest(const char* test_name, const char* test_page) { | 333 void RunTest(const char* test_name, const char* test_page) { |
| 334 ASSERT_TRUE(test_server()->Start()); | 334 ASSERT_TRUE(test_server()->Start()); |
| 335 GURL url = test_server()->GetURL(test_page); | 335 GURL url = test_server()->GetURL(test_page); |
| 336 ui_test_utils::NavigateToURL(browser(), url); | 336 ui_test_utils::NavigateToURL(browser(), url); |
| 337 | 337 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 359 } | 359 } |
| 360 | 360 |
| 361 static void WaitForFirstSharedWorkerOnIOThread( | 361 static void WaitForFirstSharedWorkerOnIOThread( |
| 362 scoped_refptr<WorkerData> worker_data) { | 362 scoped_refptr<WorkerData> worker_data) { |
| 363 std::vector<WorkerService::WorkerInfo> worker_info = | 363 std::vector<WorkerService::WorkerInfo> worker_info = |
| 364 WorkerService::GetInstance()->GetWorkers(); | 364 WorkerService::GetInstance()->GetWorkers(); |
| 365 if (!worker_info.empty()) { | 365 if (!worker_info.empty()) { |
| 366 worker_data->worker_process_id = worker_info[0].process_id; | 366 worker_data->worker_process_id = worker_info[0].process_id; |
| 367 worker_data->worker_route_id = worker_info[0].route_id; | 367 worker_data->worker_route_id = worker_info[0].route_id; |
| 368 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 368 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 369 MessageLoop::QuitClosure()); | 369 base::MessageLoop::QuitClosure()); |
| 370 return; | 370 return; |
| 371 } | 371 } |
| 372 | 372 |
| 373 WorkerService::GetInstance()->AddObserver( | 373 WorkerService::GetInstance()->AddObserver( |
| 374 new WorkerCreationObserver(worker_data.get())); | 374 new WorkerCreationObserver(worker_data.get())); |
| 375 } | 375 } |
| 376 | 376 |
| 377 static scoped_refptr<WorkerData> WaitForFirstSharedWorker() { | 377 static scoped_refptr<WorkerData> WaitForFirstSharedWorker() { |
| 378 scoped_refptr<WorkerData> worker_data(new WorkerData()); | 378 scoped_refptr<WorkerData> worker_data(new WorkerData()); |
| 379 BrowserThread::PostTask( | 379 BrowserThread::PostTask( |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 642 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir_); | 642 PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir_); |
| 643 test_data_dir_ = test_data_dir_.AppendASCII("devtools"); | 643 test_data_dir_ = test_data_dir_.AppendASCII("devtools"); |
| 644 } | 644 } |
| 645 }; | 645 }; |
| 646 | 646 |
| 647 IN_PROC_BROWSER_TEST_F(RemoteDebuggingTest, RemoteDebugger) { | 647 IN_PROC_BROWSER_TEST_F(RemoteDebuggingTest, RemoteDebugger) { |
| 648 ASSERT_TRUE(RunExtensionTest("target_list")) << message_; | 648 ASSERT_TRUE(RunExtensionTest("target_list")) << message_; |
| 649 } | 649 } |
| 650 | 650 |
| 651 } // namespace | 651 } // namespace |
| OLD | NEW |