Chromium Code Reviews| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/file_path.h" | 7 #include "base/file_path.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
| 10 #include "chrome/browser/extensions/bundle_installer.h" | 10 #include "chrome/browser/extensions/bundle_installer.h" |
| 11 #include "chrome/browser/extensions/extension_apitest.h" | 11 #include "chrome/browser/extensions/extension_apitest.h" |
| 12 #include "chrome/browser/extensions/extension_function_test_utils.h" | 12 #include "chrome/browser/extensions/extension_function_test_utils.h" |
| 13 #include "chrome/browser/extensions/extension_install_dialog.h" | 13 #include "chrome/browser/extensions/extension_install_dialog.h" |
| 14 #include "chrome/browser/extensions/extension_install_prompt.h" | 14 #include "chrome/browser/extensions/extension_install_prompt.h" |
| 15 #include "chrome/browser/extensions/extension_install_ui.h" | 15 #include "chrome/browser/extensions/extension_install_ui.h" |
| 16 #include "chrome/browser/extensions/extension_service.h" | 16 #include "chrome/browser/extensions/extension_service.h" |
| 17 #include "chrome/browser/extensions/api/webstore_private/webstore_private_api.h" | 17 #include "chrome/browser/extensions/api/webstore_private/webstore_private_api.h" |
| 18 #include "chrome/browser/extensions/webstore_installer.h" | 18 #include "chrome/browser/extensions/webstore_installer.h" |
| 19 #include "chrome/browser/gpu_blacklist.h" | 19 #include "chrome/browser/gpu_blacklist.h" |
| 20 #include "chrome/browser/profiles/profile.h" | 20 #include "chrome/browser/profiles/profile.h" |
| 21 #include "chrome/browser/ui/browser.h" | 21 #include "chrome/browser/ui/browser.h" |
| 22 #include "chrome/common/chrome_notification_types.h" | 22 #include "chrome/common/chrome_notification_types.h" |
| 23 #include "chrome/common/chrome_switches.h" | 23 #include "chrome/common/chrome_switches.h" |
| 24 #include "chrome/test/base/test_launcher_utils.h" | 24 #include "chrome/test/base/test_launcher_utils.h" |
| 25 #include "chrome/test/base/ui_test_utils.h" | 25 #include "chrome/test/base/ui_test_utils.h" |
| 26 #include "content/public/browser/gpu_data_manager.h" | 26 #include "content/public/browser/gpu_data_manager.h" |
| 27 #include "content/public/browser/notification_observer.h" | 27 #include "content/public/browser/notification_observer.h" |
| 28 #include "content/public/browser/notification_registrar.h" | 28 #include "content/public/browser/notification_registrar.h" |
| 29 #include "net/base/mock_host_resolver.h" | 29 #include "net/base/mock_host_resolver.h" |
| 30 #include "net/url_request/url_fetcher.h" | |
| 31 #include "net/url_request/url_request.h" | |
| 32 #include "net/url_request/url_request_job_manager.h" | |
| 33 #include "net/url_request/url_request_test_job.h" | |
| 30 #include "ui/gl/gl_switches.h" | 34 #include "ui/gl/gl_switches.h" |
| 31 | 35 |
| 32 using content::GpuFeatureType; | 36 using content::GpuFeatureType; |
| 33 | 37 |
| 34 namespace utils = extension_function_test_utils; | 38 namespace utils = extension_function_test_utils; |
| 35 | 39 |
| 36 namespace extensions { | 40 namespace extensions { |
| 37 | 41 |
| 38 namespace { | 42 namespace { |
| 39 | 43 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 78 const std::string& error() const { return error_; } | 82 const std::string& error() const { return error_; } |
| 79 | 83 |
| 80 private: | 84 private: |
| 81 bool received_failure_; | 85 bool received_failure_; |
| 82 bool received_success_; | 86 bool received_success_; |
| 83 bool waiting_; | 87 bool waiting_; |
| 84 std::string id_; | 88 std::string id_; |
| 85 std::string error_; | 89 std::string error_; |
| 86 }; | 90 }; |
| 87 | 91 |
| 92 class EmptyRequestJob : public net::URLRequestTestJob { | |
| 93 public: | |
| 94 EmptyRequestJob(net::URLRequest* request, | |
| 95 net::NetworkDelegate* network_delegate) | |
| 96 : net::URLRequestTestJob(request, | |
| 97 network_delegate, | |
| 98 net::URLRequestTestJob::test_headers(), | |
| 99 std::string(), | |
| 100 true) { | |
| 101 } | |
| 102 | |
| 103 virtual int GetResponseCode() const { return 204; } | |
| 104 | |
| 105 private: | |
| 106 ~EmptyRequestJob() {} | |
| 107 }; | |
| 108 | |
| 109 | |
| 110 class EmptyCRXInterceptor | |
| 111 : public net::URLRequest::Interceptor, | |
| 112 public base::RefCountedThreadSafe<EmptyCRXInterceptor> { | |
| 113 public: | |
| 114 EmptyCRXInterceptor() { | |
| 115 net::URLRequestJobManager::GetInstance()->RegisterRequestInterceptor(this); | |
| 116 } | |
| 117 | |
| 118 ~EmptyCRXInterceptor() { | |
| 119 net::URLRequestJobManager::GetInstance()-> | |
| 120 UnregisterRequestInterceptor(this); | |
| 121 } | |
| 122 | |
| 123 virtual net::URLRequestJob* MaybeIntercept(net::URLRequest* request, | |
| 124 net::NetworkDelegate* network_delegate) OVERRIDE { | |
|
asargent_no_longer_on_chrome
2012/09/10 23:52:10
formatting nit:
http://dev.chromium.org/develope
| |
| 125 | |
| 126 if (request->url().scheme() != "http" || | |
| 127 request->url().host() != "www.example.com") | |
| 128 return NULL; | |
| 129 | |
| 130 if (!EndsWith(request->url().path(), ".crx", false)) | |
| 131 return NULL; | |
| 132 | |
| 133 return new EmptyRequestJob(request, network_delegate); | |
| 134 } | |
| 135 }; | |
| 136 | |
| 137 | |
| 88 } // namespace | 138 } // namespace |
| 89 | 139 |
| 90 // A base class for tests below. | 140 // A base class for tests below. |
| 91 class ExtensionWebstorePrivateApiTest : public ExtensionApiTest { | 141 class ExtensionWebstorePrivateApiTest : public ExtensionApiTest { |
| 92 public: | 142 public: |
| 93 void SetUpCommandLine(CommandLine* command_line) OVERRIDE { | 143 void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| 94 ExtensionApiTest::SetUpCommandLine(command_line); | 144 ExtensionApiTest::SetUpCommandLine(command_line); |
| 95 command_line->AppendSwitchASCII( | 145 command_line->AppendSwitchASCII( |
| 96 switches::kAppsGalleryURL, "http://www.example.com"); | 146 switches::kAppsGalleryURL, "http://www.example.com"); |
| 97 command_line->AppendSwitchASCII( | 147 command_line->AppendSwitchASCII( |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 286 } | 336 } |
| 287 | 337 |
| 288 // Now test the case where the user cancels the confirmation dialog. | 338 // Now test the case where the user cancels the confirmation dialog. |
| 289 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, InstallCancelled) { | 339 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, InstallCancelled) { |
| 290 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 340 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 291 switches::kAppsGalleryInstallAutoConfirmForTests, "cancel"); | 341 switches::kAppsGalleryInstallAutoConfirmForTests, "cancel"); |
| 292 ASSERT_TRUE(RunInstallTest("cancelled.html", "extension.crx")); | 342 ASSERT_TRUE(RunInstallTest("cancelled.html", "extension.crx")); |
| 293 } | 343 } |
| 294 | 344 |
| 295 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, IncorrectManifest1) { | 345 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, IncorrectManifest1) { |
| 296 WebstoreInstallListener listener; | |
| 297 WebstorePrivateApi::SetWebstoreInstallerDelegateForTesting(&listener); | |
| 298 ASSERT_TRUE(RunInstallTest("incorrect_manifest1.html", "extension.crx")); | 346 ASSERT_TRUE(RunInstallTest("incorrect_manifest1.html", "extension.crx")); |
| 299 listener.Wait(); | |
| 300 ASSERT_TRUE(listener.received_failure()); | |
| 301 ASSERT_EQ("Manifest file is invalid.", listener.error()); | |
| 302 } | 347 } |
| 303 | 348 |
| 304 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, IncorrectManifest2) { | 349 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, IncorrectManifest2) { |
| 305 WebstoreInstallListener listener; | |
| 306 WebstorePrivateApi::SetWebstoreInstallerDelegateForTesting(&listener); | |
| 307 ASSERT_TRUE(RunInstallTest("incorrect_manifest2.html", "extension.crx")); | 350 ASSERT_TRUE(RunInstallTest("incorrect_manifest2.html", "extension.crx")); |
| 308 listener.Wait(); | |
| 309 EXPECT_TRUE(listener.received_failure()); | |
| 310 ASSERT_EQ("Manifest file is invalid.", listener.error()); | |
| 311 } | 351 } |
| 312 | 352 |
| 313 // Tests that we can request an app installed bubble (instead of the default | 353 // Tests that we can request an app installed bubble (instead of the default |
| 314 // UI when an app is installed). | 354 // UI when an app is installed). |
| 315 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, AppInstallBubble) { | 355 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, AppInstallBubble) { |
| 316 WebstoreInstallListener listener; | 356 WebstoreInstallListener listener; |
| 317 WebstorePrivateApi::SetWebstoreInstallerDelegateForTesting(&listener); | 357 WebstorePrivateApi::SetWebstoreInstallerDelegateForTesting(&listener); |
| 318 ASSERT_TRUE(RunInstallTest("app_install_bubble.html", "app.crx")); | 358 ASSERT_TRUE(RunInstallTest("app_install_bubble.html", "app.crx")); |
| 319 listener.Wait(); | 359 listener.Wait(); |
| 320 ASSERT_TRUE(listener.received_success()); | 360 ASSERT_TRUE(listener.received_success()); |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 350 // Tests that themes are installed without an install prompt. | 390 // Tests that themes are installed without an install prompt. |
| 351 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, InstallTheme) { | 391 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, InstallTheme) { |
| 352 WebstoreInstallListener listener; | 392 WebstoreInstallListener listener; |
| 353 WebstorePrivateApi::SetWebstoreInstallerDelegateForTesting(&listener); | 393 WebstorePrivateApi::SetWebstoreInstallerDelegateForTesting(&listener); |
| 354 ASSERT_TRUE(RunInstallTest("theme.html", "../../../theme.crx")); | 394 ASSERT_TRUE(RunInstallTest("theme.html", "../../../theme.crx")); |
| 355 listener.Wait(); | 395 listener.Wait(); |
| 356 ASSERT_TRUE(listener.received_success()); | 396 ASSERT_TRUE(listener.received_success()); |
| 357 ASSERT_EQ("iamefpfkojoapidjnbafmgkgncegbkad", listener.id()); | 397 ASSERT_EQ("iamefpfkojoapidjnbafmgkgncegbkad", listener.id()); |
| 358 } | 398 } |
| 359 | 399 |
| 400 // Tests that an error is properly reported when a 204 is returned | |
| 401 // while trying to download a the crx | |
| 402 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTest, Test204) { | |
| 403 scoped_refptr<EmptyCRXInterceptor> interceptor(new EmptyCRXInterceptor()); | |
| 404 net::URLFetcher::SetEnableInterceptionForTests(true); | |
| 405 ASSERT_TRUE(RunInstallTest("error204.html", "extension.crx")); | |
| 406 } | |
| 407 | |
| 360 // Tests successfully installing a bundle of 2 apps and 2 extensions. | 408 // Tests successfully installing a bundle of 2 apps and 2 extensions. |
| 361 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateBundleTest, InstallBundle) { | 409 IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateBundleTest, InstallBundle) { |
| 362 extensions::BundleInstaller::SetAutoApproveForTesting(true); | 410 extensions::BundleInstaller::SetAutoApproveForTesting(true); |
| 363 | 411 |
| 364 PackCRX("bmfoocgfinpmkmlbjhcbofejhkhlbchk", "extension1.json"); | 412 PackCRX("bmfoocgfinpmkmlbjhcbofejhkhlbchk", "extension1.json"); |
| 365 PackCRX("pkapffpjmiilhlhbibjhamlmdhfneidj", "extension2.json"); | 413 PackCRX("pkapffpjmiilhlhbibjhamlmdhfneidj", "extension2.json"); |
| 366 PackCRX("begfmnajjkbjdgmffnjaojchoncnmngg", "app1.json"); | 414 PackCRX("begfmnajjkbjdgmffnjaojchoncnmngg", "app1.json"); |
| 367 PackCRX("mpneghmdnmaolkljkipbhaienajcflfe", "app2.json"); | 415 PackCRX("mpneghmdnmaolkljkipbhaienajcflfe", "app2.json"); |
| 368 | 416 |
| 369 ASSERT_TRUE(RunPageTest(GetTestServerURL("install_bundle.html").spec())); | 417 ASSERT_TRUE(RunPageTest(GetTestServerURL("install_bundle.html").spec())); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 443 blacklist->UpdateGpuDataManager(); | 491 blacklist->UpdateGpuDataManager(); |
| 444 GpuFeatureType type = | 492 GpuFeatureType type = |
| 445 content::GpuDataManager::GetInstance()->GetBlacklistedFeatures(); | 493 content::GpuDataManager::GetInstance()->GetBlacklistedFeatures(); |
| 446 EXPECT_EQ(type, content::GPU_FEATURE_TYPE_WEBGL); | 494 EXPECT_EQ(type, content::GPU_FEATURE_TYPE_WEBGL); |
| 447 | 495 |
| 448 bool webgl_allowed = false; | 496 bool webgl_allowed = false; |
| 449 RunTest(webgl_allowed); | 497 RunTest(webgl_allowed); |
| 450 } | 498 } |
| 451 | 499 |
| 452 } // namespace extensions | 500 } // namespace extensions |
| OLD | NEW |