172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/message_loop.h" 63f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/threading/thread.h" 721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/extensions/extension_service_unittest.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/user_script_listener.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_paths.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension_file_util.h" 11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/global_request_id.h" 12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/resource_dispatcher_host_request_info.h" 13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/resource_handler.h" 14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/renderer_host/resource_queue.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_service.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_type.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/url_request/url_request.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/url_request/url_request_test_job.h" 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "net/url_request/url_request_test_util.h" 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile; 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kMatchingUrl[] = "http://google.com/"; 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kNotMatchingUrl[] = "http://example.com/"; 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kTestData[] = "Hello, World!"; 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Dummy ResourceHandler required for ResourceDispatcherHostRequestInfo. 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass DummyResourceHandler : public ResourceHandler { 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DummyResourceHandler() { 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool OnUploadProgress(int request_id, uint64 position, uint64 size) { 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool OnRequestRedirected(int request_id, const GURL& url, 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResourceResponse* response, 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool* defer) { 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool OnResponseStarted(int request_id, 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResourceResponse* response) { 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool OnWillStart(int request_id, 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& url, 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool* defer) { 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool OnWillRead(int request_id, 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::IOBuffer** buf, 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int* buf_size, 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int min_size) { 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool OnReadCompleted(int request_id, int* bytes_read) { 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool OnResponseCompleted(int request_id, 7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const net::URLRequestStatus& status, 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& security_info) { 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnRequestClosed() { 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(DummyResourceHandler); 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochResourceDispatcherHostRequestInfo* CreateRequestInfo(int request_id) { 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new ResourceDispatcherHostRequestInfo( 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new DummyResourceHandler(), ChildProcessInfo::RENDER_PROCESS, 0, 0, 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen request_id, ResourceType::MAIN_FRAME, 0, false, false, false); 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// A simple test net::URLRequestJob. We don't care what it does, only that 9621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// whether it starts and finishes. 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass SimpleTestJob : public net::URLRequestTestJob { 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 9921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen explicit SimpleTestJob(net::URLRequest* request) 10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : net::URLRequestTestJob(request, test_headers(), kTestData, true) {} 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~SimpleTestJob() {} 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass UserScriptListenerTest 10621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen : public ExtensionServiceTestBase, 10721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public net::URLRequest::Interceptor { 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserScriptListenerTest() { 11021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen net::URLRequest::RegisterRequestInterceptor(this); 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ~UserScriptListenerTest() { 11421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen net::URLRequest::UnregisterRequestInterceptor(this); 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 11821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ExtensionServiceTestBase::SetUp(); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen InitializeEmptyExtensionService(); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch service_->Init(); 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen listener_ = new UserScriptListener(); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResourceQueue::DelegateSet delegates; 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegates.insert(listener_.get()); 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch resource_queue_.Initialize(delegates); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TearDown() { 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch resource_queue_.Shutdown(); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch listener_ = NULL; 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // net::URLRequest::Interceptor 13821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual net::URLRequestJob* MaybeIntercept(net::URLRequest* request) { 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new SimpleTestJob(request); 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 14321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen TestURLRequest* StartTestRequest(net::URLRequest::Delegate* delegate, 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& url) { 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestURLRequest* request = new TestURLRequest(GURL(url), delegate); 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<ResourceDispatcherHostRequestInfo> rdh_info( 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CreateRequestInfo(0)); 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch resource_queue_.AddRequest(request, *rdh_info.get()); 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return request; 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void LoadTestExtension() { 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath test_dir; 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir)); 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath extension_path = test_dir 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("extensions") 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("good") 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("Extensions") 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch .AppendASCII("1.0.0.0"); 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch service_->LoadExtension(extension_path); 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void UnloadTestExtension() { 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_FALSE(service_->extensions()->empty()); 16621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen service_->UnloadExtension(service_->extensions()->at(0)->id(), 16721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen UnloadedExtensionInfo::DISABLE); 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<UserScriptListener> listener_; 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResourceQueue resource_queue_; 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(UserScriptListenerTest, DelayAndUpdate) { 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LoadTestExtension(); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestDelegate delegate; 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<TestURLRequest> request(StartTestRequest(&delegate, kMatchingUrl)); 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_FALSE(request->is_pending()); 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::current()->Notify( 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationType::USER_SCRIPTS_UPDATED, 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source<Profile>(profile_.get()), 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::NoDetails()); 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(kTestData, delegate.data_received()); 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(UserScriptListenerTest, DelayAndUnload) { 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LoadTestExtension(); 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestDelegate delegate; 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<TestURLRequest> request(StartTestRequest(&delegate, kMatchingUrl)); 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_FALSE(request->is_pending()); 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UnloadTestExtension(); 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is still not enough to start delayed requests. We have to notify the 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // listener that the user scripts have been updated. 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_FALSE(request->is_pending()); 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::current()->Notify( 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationType::USER_SCRIPTS_UPDATED, 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Source<Profile>(profile_.get()), 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::NoDetails()); 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(kTestData, delegate.data_received()); 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(UserScriptListenerTest, NoDelayNoExtension) { 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestDelegate delegate; 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<TestURLRequest> request(StartTestRequest(&delegate, kMatchingUrl)); 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The request should be started immediately. 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(request->is_pending()); 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(kTestData, delegate.data_received()); 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(UserScriptListenerTest, NoDelayNotMatching) { 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LoadTestExtension(); 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TestDelegate delegate; 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<TestURLRequest> request(StartTestRequest(&delegate, 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kNotMatchingUrl)); 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The request should be started immediately. 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(request->is_pending()); 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(kTestData, delegate.data_received()); 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 242