| 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 "chrome/browser/extensions/extension_service_unittest.h" | 5 #include "chrome/browser/extensions/extension_service_unittest.h" | 
| 6 | 6 | 
| 7 #include <algorithm> | 7 #include <algorithm> | 
| 8 #include <set> | 8 #include <set> | 
| 9 #include <vector> | 9 #include <vector> | 
| 10 | 10 | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 54 #include "chrome/common/chrome_switches.h" | 54 #include "chrome/common/chrome_switches.h" | 
| 55 #include "chrome/common/extensions/extension.h" | 55 #include "chrome/common/extensions/extension.h" | 
| 56 #include "chrome/common/extensions/extension_constants.h" | 56 #include "chrome/common/extensions/extension_constants.h" | 
| 57 #include "chrome/common/extensions/extension_resource.h" | 57 #include "chrome/common/extensions/extension_resource.h" | 
| 58 #include "chrome/common/extensions/url_pattern.h" | 58 #include "chrome/common/extensions/url_pattern.h" | 
| 59 #include "chrome/common/pref_names.h" | 59 #include "chrome/common/pref_names.h" | 
| 60 #include "chrome/common/string_ordinal.h" | 60 #include "chrome/common/string_ordinal.h" | 
| 61 #include "chrome/common/url_constants.h" | 61 #include "chrome/common/url_constants.h" | 
| 62 #include "chrome/test/base/testing_profile.h" | 62 #include "chrome/test/base/testing_profile.h" | 
| 63 #include "content/browser/appcache/chrome_appcache_service.h" | 63 #include "content/browser/appcache/chrome_appcache_service.h" | 
| 64 #include "content/browser/file_system/browser_file_system_helper.h" |  | 
| 65 #include "content/browser/in_process_webkit/dom_storage_context.h" | 64 #include "content/browser/in_process_webkit/dom_storage_context.h" | 
| 66 #include "content/browser/in_process_webkit/webkit_context.h" | 65 #include "content/browser/in_process_webkit/webkit_context.h" | 
| 67 #include "content/public/browser/notification_registrar.h" | 66 #include "content/public/browser/notification_registrar.h" | 
| 68 #include "content/public/browser/notification_service.h" | 67 #include "content/public/browser/notification_service.h" | 
| 69 #include "content/public/browser/plugin_service.h" | 68 #include "content/public/browser/plugin_service.h" | 
|  | 69 #include "content/public/common/content_constants.h" | 
| 70 #include "content/test/test_browser_thread.h" | 70 #include "content/test/test_browser_thread.h" | 
| 71 #include "googleurl/src/gurl.h" | 71 #include "googleurl/src/gurl.h" | 
| 72 #include "grit/browser_resources.h" | 72 #include "grit/browser_resources.h" | 
| 73 #include "net/base/cookie_monster.h" | 73 #include "net/base/cookie_monster.h" | 
| 74 #include "net/base/cookie_options.h" | 74 #include "net/base/cookie_options.h" | 
| 75 #include "net/url_request/url_request_context.h" | 75 #include "net/url_request/url_request_context.h" | 
| 76 #include "net/url_request/url_request_context_getter.h" | 76 #include "net/url_request/url_request_context_getter.h" | 
| 77 #include "testing/gtest/include/gtest/gtest.h" | 77 #include "testing/gtest/include/gtest/gtest.h" | 
| 78 #include "testing/platform_test.h" | 78 #include "testing/platform_test.h" | 
| 79 #include "webkit/database/database_tracker.h" | 79 #include "webkit/database/database_tracker.h" | 
| 80 #include "webkit/database/database_util.h" | 80 #include "webkit/database/database_util.h" | 
| 81 #include "webkit/plugins/npapi/mock_plugin_list.h" | 81 #include "webkit/plugins/npapi/mock_plugin_list.h" | 
| 82 #include "webkit/quota/quota_manager.h" | 82 #include "webkit/quota/quota_manager.h" | 
| 83 | 83 | 
|  | 84 using content::BrowserContext; | 
| 84 using content::BrowserThread; | 85 using content::BrowserThread; | 
| 85 using content::PluginService; | 86 using content::PluginService; | 
| 86 | 87 | 
| 87 namespace keys = extension_manifest_keys; | 88 namespace keys = extension_manifest_keys; | 
| 88 | 89 | 
| 89 namespace { | 90 namespace { | 
| 90 | 91 | 
| 91 // Extension ids used during testing. | 92 // Extension ids used during testing. | 
| 92 const char* const all_zero = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 93 const char* const all_zero = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 
| 93 const char* const zero_n_one = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab"; | 94 const char* const zero_n_one = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab"; | 
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 368 class ExtensionTestingProfile : public TestingProfile { | 369 class ExtensionTestingProfile : public TestingProfile { | 
| 369  public: | 370  public: | 
| 370   ExtensionTestingProfile() : service_(NULL) { | 371   ExtensionTestingProfile() : service_(NULL) { | 
| 371   } | 372   } | 
| 372 | 373 | 
| 373   void set_extensions_service(ExtensionService* service) { | 374   void set_extensions_service(ExtensionService* service) { | 
| 374     service_ = service; | 375     service_ = service; | 
| 375   } | 376   } | 
| 376   virtual ExtensionService* GetExtensionService() { return service_; } | 377   virtual ExtensionService* GetExtensionService() { return service_; } | 
| 377 | 378 | 
| 378   virtual ChromeAppCacheService* GetAppCacheService() { |  | 
| 379     if (!appcache_service_) { |  | 
| 380       appcache_service_ = new ChromeAppCacheService(NULL); |  | 
| 381       if (!BrowserThread::PostTask( |  | 
| 382               BrowserThread::IO, FROM_HERE, |  | 
| 383               base::Bind( |  | 
| 384                   &ChromeAppCacheService::InitializeOnIOThread, |  | 
| 385                   appcache_service_.get(), |  | 
| 386                   IsOffTheRecord() |  | 
| 387                   ? FilePath() : GetPath().Append(chrome::kAppCacheDirname), |  | 
| 388                   GetResourceContext(), |  | 
| 389                   make_scoped_refptr(GetExtensionSpecialStoragePolicy())))) |  | 
| 390         NOTREACHED(); |  | 
| 391     } |  | 
| 392     return appcache_service_; |  | 
| 393   } |  | 
| 394 |  | 
| 395   virtual fileapi::FileSystemContext* GetFileSystemContext() { |  | 
| 396     if (!file_system_context_) { |  | 
| 397       quota::QuotaManager* quota_manager = GetQuotaManager(); |  | 
| 398       file_system_context_ = CreateFileSystemContext( |  | 
| 399           GetPath(), IsOffTheRecord(), |  | 
| 400           GetExtensionSpecialStoragePolicy(), |  | 
| 401           quota_manager ? quota_manager->proxy() : NULL); |  | 
| 402     } |  | 
| 403     return file_system_context_; |  | 
| 404   } |  | 
| 405 |  | 
| 406  private: | 379  private: | 
| 407   ExtensionService* service_; | 380   ExtensionService* service_; | 
| 408   scoped_refptr<ChromeAppCacheService> appcache_service_; |  | 
| 409   scoped_refptr<fileapi::FileSystemContext> file_system_context_; |  | 
| 410 }; | 381 }; | 
| 411 | 382 | 
| 412 // Our message loop may be used in tests which require it to be an IO loop. | 383 // Our message loop may be used in tests which require it to be an IO loop. | 
| 413 ExtensionServiceTestBase::ExtensionServiceTestBase() | 384 ExtensionServiceTestBase::ExtensionServiceTestBase() | 
| 414     : loop_(MessageLoop::TYPE_IO), | 385     : loop_(MessageLoop::TYPE_IO), | 
| 415       service_(NULL), | 386       service_(NULL), | 
| 416       expected_extensions_count_(0), | 387       expected_extensions_count_(0), | 
| 417       ui_thread_(BrowserThread::UI, &loop_), | 388       ui_thread_(BrowserThread::UI, &loop_), | 
| 418       db_thread_(BrowserThread::DB, &loop_), | 389       db_thread_(BrowserThread::DB, &loop_), | 
| 419       webkit_thread_(BrowserThread::WEBKIT_DEPRECATED, &loop_), | 390       webkit_thread_(BrowserThread::WEBKIT_DEPRECATED, &loop_), | 
| (...skipping 2677 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3097   EXPECT_TRUE(callback.result_); | 3068   EXPECT_TRUE(callback.result_); | 
| 3098 | 3069 | 
| 3099   cookie_monster->GetAllCookiesForURLAsync( | 3070   cookie_monster->GetAllCookiesForURLAsync( | 
| 3100       ext_url, | 3071       ext_url, | 
| 3101       base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, | 3072       base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, | 
| 3102                  base::Unretained(&callback))); | 3073                  base::Unretained(&callback))); | 
| 3103   loop_.RunAllPending(); | 3074   loop_.RunAllPending(); | 
| 3104   EXPECT_EQ(1U, callback.list_.size()); | 3075   EXPECT_EQ(1U, callback.list_.size()); | 
| 3105 | 3076 | 
| 3106   // Open a database. | 3077   // Open a database. | 
| 3107   webkit_database::DatabaseTracker* db_tracker = profile_->GetDatabaseTracker(); | 3078   webkit_database::DatabaseTracker* db_tracker = | 
|  | 3079       BrowserContext::GetDatabaseTracker(profile_.get()); | 
| 3108   string16 db_name = UTF8ToUTF16("db"); | 3080   string16 db_name = UTF8ToUTF16("db"); | 
| 3109   string16 description = UTF8ToUTF16("db_description"); | 3081   string16 description = UTF8ToUTF16("db_description"); | 
| 3110   int64 size; | 3082   int64 size; | 
| 3111   db_tracker->DatabaseOpened(origin_id, db_name, description, 1, &size); | 3083   db_tracker->DatabaseOpened(origin_id, db_name, description, 1, &size); | 
| 3112   db_tracker->DatabaseClosed(origin_id, db_name); | 3084   db_tracker->DatabaseClosed(origin_id, db_name); | 
| 3113   std::vector<webkit_database::OriginInfo> origins; | 3085   std::vector<webkit_database::OriginInfo> origins; | 
| 3114   db_tracker->GetAllOriginsInfo(&origins); | 3086   db_tracker->GetAllOriginsInfo(&origins); | 
| 3115   EXPECT_EQ(1U, origins.size()); | 3087   EXPECT_EQ(1U, origins.size()); | 
| 3116   EXPECT_EQ(origin_id, origins[0].GetOrigin()); | 3088   EXPECT_EQ(origin_id, origins[0].GetOrigin()); | 
| 3117 | 3089 | 
| 3118   // Create local storage. We only simulate this by creating the backing file | 3090   // Create local storage. We only simulate this by creating the backing file | 
| 3119   // since webkit is not initialized. | 3091   // since webkit is not initialized. | 
| 3120   DOMStorageContext* context = | 3092   DOMStorageContext* context = | 
| 3121       profile_->GetWebKitContext()->dom_storage_context(); | 3093       BrowserContext::GetWebKitContext(profile_.get())->dom_storage_context(); | 
| 3122   FilePath lso_path = context->GetLocalStorageFilePath(origin_id); | 3094   FilePath lso_path = context->GetLocalStorageFilePath(origin_id); | 
| 3123   EXPECT_TRUE(file_util::CreateDirectory(lso_path.DirName())); | 3095   EXPECT_TRUE(file_util::CreateDirectory(lso_path.DirName())); | 
| 3124   EXPECT_EQ(0, file_util::WriteFile(lso_path, NULL, 0)); | 3096   EXPECT_EQ(0, file_util::WriteFile(lso_path, NULL, 0)); | 
| 3125   EXPECT_TRUE(file_util::PathExists(lso_path)); | 3097   EXPECT_TRUE(file_util::PathExists(lso_path)); | 
| 3126 | 3098 | 
| 3127   // Create indexed db. Similarly, it is enough to only simulate this by | 3099   // Create indexed db. Similarly, it is enough to only simulate this by | 
| 3128   // creating the directory on the disk. | 3100   // creating the directory on the disk. | 
| 3129   IndexedDBContext* idb_context = | 3101   IndexedDBContext* idb_context = | 
| 3130       profile_->GetWebKitContext()->indexed_db_context(); | 3102       BrowserContext::GetWebKitContext(profile_.get())->indexed_db_context(); | 
| 3131   FilePath idb_path = idb_context->GetIndexedDBFilePath(origin_id); | 3103   FilePath idb_path = idb_context->GetIndexedDBFilePath(origin_id); | 
| 3132   EXPECT_TRUE(file_util::CreateDirectory(idb_path)); | 3104   EXPECT_TRUE(file_util::CreateDirectory(idb_path)); | 
| 3133   EXPECT_TRUE(file_util::DirectoryExists(idb_path)); | 3105   EXPECT_TRUE(file_util::DirectoryExists(idb_path)); | 
| 3134 | 3106 | 
| 3135   // Uninstall the extension. | 3107   // Uninstall the extension. | 
| 3136   service_->UninstallExtension(good_crx, false, NULL); | 3108   service_->UninstallExtension(good_crx, false, NULL); | 
| 3137   loop_.RunAllPending(); | 3109   loop_.RunAllPending(); | 
| 3138 | 3110 | 
| 3139   // Check that the cookie is gone. | 3111   // Check that the cookie is gone. | 
| 3140   cookie_monster->GetAllCookiesForURLAsync( | 3112   cookie_monster->GetAllCookiesForURLAsync( | 
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3206   EXPECT_TRUE(callback.result_); | 3178   EXPECT_TRUE(callback.result_); | 
| 3207 | 3179 | 
| 3208   cookie_monster->GetAllCookiesForURLAsync( | 3180   cookie_monster->GetAllCookiesForURLAsync( | 
| 3209       origin1, | 3181       origin1, | 
| 3210       base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, | 3182       base::Bind(&ExtensionCookieCallback::GetAllCookiesCallback, | 
| 3211                  base::Unretained(&callback))); | 3183                  base::Unretained(&callback))); | 
| 3212   loop_.RunAllPending(); | 3184   loop_.RunAllPending(); | 
| 3213   EXPECT_EQ(1U, callback.list_.size()); | 3185   EXPECT_EQ(1U, callback.list_.size()); | 
| 3214 | 3186 | 
| 3215   // Open a database. | 3187   // Open a database. | 
| 3216   webkit_database::DatabaseTracker* db_tracker = profile_->GetDatabaseTracker(); | 3188   webkit_database::DatabaseTracker* db_tracker = | 
|  | 3189       BrowserContext::GetDatabaseTracker(profile_.get()); | 
| 3217   string16 db_name = UTF8ToUTF16("db"); | 3190   string16 db_name = UTF8ToUTF16("db"); | 
| 3218   string16 description = UTF8ToUTF16("db_description"); | 3191   string16 description = UTF8ToUTF16("db_description"); | 
| 3219   int64 size; | 3192   int64 size; | 
| 3220   db_tracker->DatabaseOpened(origin_id, db_name, description, 1, &size); | 3193   db_tracker->DatabaseOpened(origin_id, db_name, description, 1, &size); | 
| 3221   db_tracker->DatabaseClosed(origin_id, db_name); | 3194   db_tracker->DatabaseClosed(origin_id, db_name); | 
| 3222   std::vector<webkit_database::OriginInfo> origins; | 3195   std::vector<webkit_database::OriginInfo> origins; | 
| 3223   db_tracker->GetAllOriginsInfo(&origins); | 3196   db_tracker->GetAllOriginsInfo(&origins); | 
| 3224   EXPECT_EQ(1U, origins.size()); | 3197   EXPECT_EQ(1U, origins.size()); | 
| 3225   EXPECT_EQ(origin_id, origins[0].GetOrigin()); | 3198   EXPECT_EQ(origin_id, origins[0].GetOrigin()); | 
| 3226 | 3199 | 
| 3227   // Create local storage. We only simulate this by creating the backing file | 3200   // Create local storage. We only simulate this by creating the backing file | 
| 3228   // since webkit is not initialized. | 3201   // since webkit is not initialized. | 
| 3229   DOMStorageContext* context = | 3202   DOMStorageContext* context = | 
| 3230       profile_->GetWebKitContext()->dom_storage_context(); | 3203       BrowserContext::GetWebKitContext(profile_.get())->dom_storage_context(); | 
| 3231   FilePath lso_path = context->GetLocalStorageFilePath(origin_id); | 3204   FilePath lso_path = context->GetLocalStorageFilePath(origin_id); | 
| 3232   EXPECT_TRUE(file_util::CreateDirectory(lso_path.DirName())); | 3205   EXPECT_TRUE(file_util::CreateDirectory(lso_path.DirName())); | 
| 3233   EXPECT_EQ(0, file_util::WriteFile(lso_path, NULL, 0)); | 3206   EXPECT_EQ(0, file_util::WriteFile(lso_path, NULL, 0)); | 
| 3234   EXPECT_TRUE(file_util::PathExists(lso_path)); | 3207   EXPECT_TRUE(file_util::PathExists(lso_path)); | 
| 3235 | 3208 | 
| 3236   // Create indexed db. Similarly, it is enough to only simulate this by | 3209   // Create indexed db. Similarly, it is enough to only simulate this by | 
| 3237   // creating the directory on the disk. | 3210   // creating the directory on the disk. | 
| 3238   IndexedDBContext* idb_context = | 3211   IndexedDBContext* idb_context = | 
| 3239       profile_->GetWebKitContext()->indexed_db_context(); | 3212       BrowserContext::GetWebKitContext(profile_.get())->indexed_db_context(); | 
| 3240   FilePath idb_path = idb_context->GetIndexedDBFilePath(origin_id); | 3213   FilePath idb_path = idb_context->GetIndexedDBFilePath(origin_id); | 
| 3241   EXPECT_TRUE(file_util::CreateDirectory(idb_path)); | 3214   EXPECT_TRUE(file_util::CreateDirectory(idb_path)); | 
| 3242   EXPECT_TRUE(file_util::DirectoryExists(idb_path)); | 3215   EXPECT_TRUE(file_util::DirectoryExists(idb_path)); | 
| 3243 | 3216 | 
| 3244   // Uninstall one of them, unlimited storage should still be granted | 3217   // Uninstall one of them, unlimited storage should still be granted | 
| 3245   // to the origin. | 3218   // to the origin. | 
| 3246   UninstallExtension(id1, false); | 3219   UninstallExtension(id1, false); | 
| 3247   EXPECT_EQ(1u, service_->extensions()->size()); | 3220   EXPECT_EQ(1u, service_->extensions()->size()); | 
| 3248   EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 3221   EXPECT_TRUE(profile_->GetExtensionSpecialStoragePolicy()-> | 
| 3249       IsStorageUnlimited(origin1)); | 3222       IsStorageUnlimited(origin1)); | 
| (...skipping 1559 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4809   ASSERT_FALSE(AddPendingSyncInstall()); | 4782   ASSERT_FALSE(AddPendingSyncInstall()); | 
| 4810 | 4783 | 
| 4811   // Wait for the external source to install. | 4784   // Wait for the external source to install. | 
| 4812   WaitForCrxInstall(crx_path_, INSTALL_NEW); | 4785   WaitForCrxInstall(crx_path_, INSTALL_NEW); | 
| 4813   ASSERT_TRUE(IsCrxInstalled()); | 4786   ASSERT_TRUE(IsCrxInstalled()); | 
| 4814 | 4787 | 
| 4815   // Now that the extension is installed, sync request should fail | 4788   // Now that the extension is installed, sync request should fail | 
| 4816   // because the extension is already installed. | 4789   // because the extension is already installed. | 
| 4817   ASSERT_FALSE(AddPendingSyncInstall()); | 4790   ASSERT_FALSE(AddPendingSyncInstall()); | 
| 4818 } | 4791 } | 
| OLD | NEW | 
|---|