1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian 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 "chrome/browser/extensions/extension_apitest.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_util.h" 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/stringprintf.h" 921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/extensions/extension_service.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/extensions/extension_test_api.h" 1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui_test_utils.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16731df977c0511bca2206b5f333555b1205ff1f43Iain Merricknamespace { 17731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 18731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickconst char kTestServerPort[] = "testServer.port"; 19731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}; // namespace 21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenExtensionApiTest::ExtensionApiTest() {} 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenExtensionApiTest::~ExtensionApiTest() {} 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickExtensionApiTest::ResultCatcher::ResultCatcher() 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : profile_restriction_(NULL), 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick waiting_(false) { 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch registrar_.Add(this, NotificationType::EXTENSION_TEST_PASSED, 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::AllSources()); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch registrar_.Add(this, NotificationType::EXTENSION_TEST_FAILED, 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::AllSources()); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickExtensionApiTest::ResultCatcher::~ResultCatcher() { 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool ExtensionApiTest::ResultCatcher::GetNextResult() { 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Depending on the tests, multiple results can come in from a single call 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // to RunMessageLoop(), so we maintain a queue of results and just pull them 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // off as the test calls this, going to the run loop only when the queue is 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // empty. 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (results_.empty()) { 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick waiting_ = true; 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ui_test_utils::RunMessageLoop(); 463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick waiting_ = false; 473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!results_.empty()) { 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool ret = results_.front(); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch results_.pop_front(); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch message_ = messages_.front(); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch messages_.pop_front(); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return ret; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ExtensionApiTest::ResultCatcher::Observe( 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationType type, const NotificationSource& source, 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details) { 643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (profile_restriction_ && 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Source<Profile>(source).ptr() != profile_restriction_) { 663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return; 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (type.value) { 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case NotificationType::EXTENSION_TEST_PASSED: 71513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch VLOG(1) << "Got EXTENSION_TEST_PASSED notification."; 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch results_.push_back(true); 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch messages_.push_back(""); 743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (waiting_) 753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MessageLoopForUI::current()->Quit(); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case NotificationType::EXTENSION_TEST_FAILED: 79513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch VLOG(1) << "Got EXTENSION_TEST_FAILED notification."; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch results_.push_back(false); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch messages_.push_back(*(Details<std::string>(details).ptr())); 823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (waiting_) 833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MessageLoopForUI::current()->Quit(); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default: 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NOTREACHED(); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 91731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid ExtensionApiTest::SetUpInProcessBrowserTestFixture() { 92731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(!test_config_.get()) << "Previous test did not clear config state."; 93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick test_config_.reset(new DictionaryValue()); 94731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExtensionTestGetConfigFunction::set_test_config_state(test_config_.get()); 95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 96731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 97731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid ExtensionApiTest::TearDownInProcessBrowserTestFixture() { 98731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExtensionTestGetConfigFunction::set_test_config_state(NULL); 99731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick test_config_.reset(NULL); 100731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 101731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool ExtensionApiTest::RunExtensionTest(const char* extension_name) { 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return RunExtensionTestImpl(extension_name, "", false, true, false); 1043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool ExtensionApiTest::RunExtensionTestIncognito(const char* extension_name) { 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return RunExtensionTestImpl(extension_name, "", true, true, false); 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool ExtensionApiTest::RunComponentExtensionTest(const char* extension_name) { 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return RunExtensionTestImpl(extension_name, "", false, true, true); 1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool ExtensionApiTest::RunExtensionTestNoFileAccess( 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const char* extension_name) { 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return RunExtensionTestImpl(extension_name, "", false, false, false); 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool ExtensionApiTest::RunExtensionTestIncognitoNoFileAccess( 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const char* extension_name) { 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return RunExtensionTestImpl(extension_name, "", true, false, false); 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 1233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool ExtensionApiTest::RunExtensionSubtest(const char* extension_name, 1243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& page_url) { 1253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK(!page_url.empty()) << "Argument page_url is required."; 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return RunExtensionTestImpl(extension_name, page_url, false, true, false); 1273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool ExtensionApiTest::RunPageTest(const std::string& page_url) { 1303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return RunExtensionSubtest("", page_url); 1313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Load |extension_name| extension and/or |page_url| and wait for 1343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// PASSED or FAILED notification. 1353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool ExtensionApiTest::RunExtensionTestImpl(const char* extension_name, 1363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& page_url, 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool enable_incognito, 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool enable_fileaccess, 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool load_as_component) { 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResultCatcher catcher; 1413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK(!std::string(extension_name).empty() || !page_url.empty()) << 1423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick "extension_name and page_url cannot both be empty"; 1433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!std::string(extension_name).empty()) { 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool loaded = false; 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (load_as_component) { 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen loaded = 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen LoadExtensionAsComponent(test_data_dir_.AppendASCII(extension_name)); 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (enable_incognito) { 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen loaded = enable_fileaccess ? 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen LoadExtensionIncognito(test_data_dir_.AppendASCII(extension_name)) : 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen LoadExtensionIncognitoNoFileAccess( 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen test_data_dir_.AppendASCII(extension_name)); 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen loaded = enable_fileaccess ? 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen LoadExtension(test_data_dir_.AppendASCII(extension_name)) : 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen LoadExtensionNoFileAccess(test_data_dir_.AppendASCII(extension_name)); 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 1613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!loaded) { 1623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick message_ = "Failed to load extension."; 1633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return false; 1643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // If there is a page_url to load, navigate it. 1683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!page_url.empty()) { 1693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick GURL url = GURL(page_url); 1703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Note: We use is_valid() here in the expectation that the provided url 1723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // may lack a scheme & host and thus be a relative url within the loaded 1733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // extension. 1743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!url.is_valid()) { 1753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK(!std::string(extension_name).empty()) << 1763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick "Relative page_url given with no extension_name"; 1773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 17821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ExtensionService* service = browser()->profile()->GetExtensionService(); 179513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const Extension* extension = 1803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick service->GetExtensionById(last_loaded_extension_id_, false); 1813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!extension) 1823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return false; 1833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick url = extension->GetResourceURL(page_url); 1853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ui_test_utils::NavigateToURL(browser(), url); 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!catcher.GetNextResult()) { 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch message_ = catcher.message(); 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Test that exactly one extension loaded. 199513209b27ff55e2841eac0e4120199c23acce758Ben Murdochconst Extension* ExtensionApiTest::GetSingleLoadedExtension() { 20021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen ExtensionService* service = browser()->profile()->GetExtensionService(); 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int found_extension_index = -1; 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (size_t i = 0; i < service->extensions()->size(); ++i) { 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Ignore any component extensions. They are automatically loaded into all 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // profiles and aren't the extension we're looking for here. 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (service->extensions()->at(i)->location() == Extension::COMPONENT) 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch continue; 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (found_extension_index != -1) { 2103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick message_ = base::StringPrintf( 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Expected only one extension to be present. Found %u.", 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static_cast<unsigned>(service->extensions()->size())); 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch found_extension_index = static_cast<int>(i); 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 219513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const Extension* extension = service->extensions()->at(found_extension_index); 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!extension) { 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch message_ = "extension pointer is NULL."; 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return NULL; 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return extension; 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 227731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickbool ExtensionApiTest::StartTestServer() { 228731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!test_server()->Start()) 229731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return false; 230731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 231731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Build a dictionary of values that tests can use to build URLs that 232731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // access the test server. Tests can see these values using the extension 233731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // API function chrome.test.getConfig(). 234731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick test_config_->SetInteger(kTestServerPort, 235731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick test_server()->host_port_pair().port()); 236731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 237731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return true; 238731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 239731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ExtensionApiTest::SetUpCommandLine(CommandLine* command_line) { 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExtensionBrowserTest::SetUpCommandLine(command_line); 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch test_data_dir_ = test_data_dir_.AppendASCII("api_test"); 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 244