15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/cookie_settings.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_special_storage_policy.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/content_settings.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/content_settings/core/common/content_settings_types.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/extension_set.h" 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest.h" 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest_constants.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using extensions::Extension; 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using extensions::ExtensionSet; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using extensions::Manifest; 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::SpecialStoragePolicy; 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef SpecialStoragePolicy::StoragePolicy StoragePolicy; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace keys = extensions::manifest_keys; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionSpecialStoragePolicyTest : public testing::Test { 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class PolicyChangeObserver : public SpecialStoragePolicy::Observer { 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PolicyChangeObserver() 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : expected_type_(NOTIFICATION_TYPE_NONE), 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_change_flags_(0) { 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnGranted(const GURL& origin, 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int change_flags) OVERRIDE { 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected_type_, NOTIFICATION_TYPE_GRANT); 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected_origin_, origin); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected_change_flags_, change_flags); 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_type_ = NOTIFICATION_TYPE_NONE; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnRevoked(const GURL& origin, 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int change_flags) OVERRIDE { 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected_type_, NOTIFICATION_TYPE_REVOKE); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected_origin_, origin); 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected_change_flags_, change_flags); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_type_ = NOTIFICATION_TYPE_NONE; 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnCleared() OVERRIDE { 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(expected_type_, NOTIFICATION_TYPE_CLEAR); 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_type_ = NOTIFICATION_TYPE_NONE; 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectGrant(const std::string& extension_id, 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int change_flags) { 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_type_ = NOTIFICATION_TYPE_GRANT; 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_origin_ = Extension::GetBaseURLFromExtensionId(extension_id); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_change_flags_ = change_flags; 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectRevoke(const std::string& extension_id, 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int change_flags) { 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_type_ = NOTIFICATION_TYPE_REVOKE; 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_origin_ = Extension::GetBaseURLFromExtensionId(extension_id); 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_change_flags_ = change_flags; 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ExpectClear() { 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) expected_type_ = NOTIFICATION_TYPE_CLEAR; 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool IsCompleted() { 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return expected_type_ == NOTIFICATION_TYPE_NONE; 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enum { 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTIFICATION_TYPE_NONE, 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTIFICATION_TYPE_GRANT, 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTIFICATION_TYPE_REVOKE, 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NOTIFICATION_TYPE_CLEAR, 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } expected_type_; 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GURL expected_origin_; 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int expected_change_flags_; 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PolicyChangeObserver); 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUp() OVERRIDE { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_ = new ExtensionSpecialStoragePolicy(NULL); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> CreateProtectedApp() { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path(FILE_PATH_LITERAL("c:\\foo")); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path(FILE_PATH_LITERAL("/foo")); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue manifest; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.SetString(keys::kName, "Protected"); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.SetString(keys::kVersion, "1"); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.SetString(keys::kLaunchWebURL, "http://explicit/protected/start"); 109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::ListValue* list = new base::ListValue(); 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) list->Append(new base::StringValue("http://explicit/protected")); 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) list->Append(new base::StringValue("*://*.wildcards/protected")); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.Set(keys::kWebURLs, list); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> protected_app = Extension::Create( 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path, Manifest::INVALID_LOCATION, manifest, 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Extension::NO_FLAGS, &error); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(protected_app.get()) << error; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return protected_app; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> CreateUnlimitedApp() { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path(FILE_PATH_LITERAL("c:\\bar")); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path(FILE_PATH_LITERAL("/bar")); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue manifest; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.SetString(keys::kName, "Unlimited"); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.SetString(keys::kVersion, "1"); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.SetString(keys::kLaunchWebURL, "http://explicit/unlimited/start"); 131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::ListValue* list = new base::ListValue(); 1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) list->Append(new base::StringValue("unlimitedStorage")); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.Set(keys::kPermissions, list); 134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch list = new base::ListValue(); 1353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) list->Append(new base::StringValue("http://explicit/unlimited")); 1363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) list->Append(new base::StringValue("*://*.wildcards/unlimited")); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.Set(keys::kWebURLs, list); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> unlimited_app = Extension::Create( 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path, Manifest::INVALID_LOCATION, manifest, 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Extension::NO_FLAGS, &error); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(unlimited_app.get()) << error; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return unlimited_app; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> CreateRegularApp() { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath path(FILE_PATH_LITERAL("c:\\app")); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX) 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath path(FILE_PATH_LITERAL("/app")); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue manifest; 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manifest.SetString(keys::kName, "App"); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.SetString(keys::kVersion, "1"); 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) manifest.SetString(keys::kPlatformAppBackgroundPage, "background.html"); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> app = Extension::Create( 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path, Manifest::INVALID_LOCATION, manifest, 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Extension::NO_FLAGS, &error); 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(app.get()) << error; 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return app; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verifies that the set of extensions protecting |url| is *exactly* equal to 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |expected_extensions|. Pass in an empty set to verify that an origin is not 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // protected. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ExpectProtectedBy(const ExtensionSet& expected_extensions, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ExtensionSet* extensions = policy_->ExtensionsProtectingOrigin(url); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_extensions.size(), extensions->size()); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (ExtensionSet::const_iterator it = expected_extensions.begin(); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != expected_extensions.end(); ++it) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(extensions->Contains((*it)->id())) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << "Origin " << url << "not protected by extension ID " 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << (*it)->id(); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<ExtensionSpecialStoragePolicy> policy_; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionSpecialStoragePolicyTest, EmptyPolicy) { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL kHttpUrl("http://foo"); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL kExtensionUrl("chrome-extension://bar"); 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> app(CreateRegularApp()); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(kHttpUrl)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(kHttpUrl)); // test cached result 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(kExtensionUrl)); 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(app->url())); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSet empty_set; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, kHttpUrl); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This one is just based on the scheme. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(policy_->IsStorageProtected(kExtensionUrl)); 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(policy_->IsStorageProtected(app->url())); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionSpecialStoragePolicyTest, AppWithProtectedStorage) { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> extension(CreateProtectedApp()); 201868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->GrantRightsForExtension(extension.get()); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSet protecting_extensions; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protecting_extensions.Insert(extension); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSet empty_set; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(extension->url())); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(GURL("http://explicit/"))); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("http://explicit/")); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("http://explicit:6000/")); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("http://foo.wildcards/")); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("https://bar.wildcards/")); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, GURL("http://not_listed/")); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 214868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->RevokeRightsForExtension(extension.get()); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, GURL("http://explicit/")); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, GURL("http://foo.wildcards/")); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, GURL("https://bar.wildcards/")); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionSpecialStoragePolicyTest, AppWithUnlimitedStorage) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> extension(CreateUnlimitedApp()); 222868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->GrantRightsForExtension(extension.get()); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSet protecting_extensions; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protecting_extensions.Insert(extension); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSet empty_set; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("http://explicit/")); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("http://explicit:6000/")); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("https://foo.wildcards/")); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("https://foo.wildcards/")); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("http://bar.wildcards/")); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, GURL("http://not_listed/")); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(policy_->IsStorageUnlimited(extension->url())); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(policy_->IsStorageUnlimited(GURL("http://explicit/"))); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(policy_->IsStorageUnlimited(GURL("http://explicit:6000/"))); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(policy_->IsStorageUnlimited(GURL("https://foo.wildcards/"))); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(policy_->IsStorageUnlimited(GURL("https://bar.wildcards/"))); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(GURL("http://not_listed/"))); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 240868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->RevokeRightsForExtension(extension.get()); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, GURL("http://explicit/")); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, GURL("https://foo.wildcards/")); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, GURL("https://foo.wildcards/")); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, GURL("http://bar.wildcards/")); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(GURL("http://explicit/"))); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(GURL("https://foo.wildcards/"))); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(GURL("https://bar.wildcards/"))); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExtensionSpecialStoragePolicyTest, CanQueryDiskSize) { 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GURL kHttpUrl("http://foo"); 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const GURL kExtensionUrl("chrome-extension://bar"); 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> regular_app(CreateRegularApp()); 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> protected_app(CreateProtectedApp()); 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> unlimited_app(CreateUnlimitedApp()); 256868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->GrantRightsForExtension(regular_app.get()); 257868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->GrantRightsForExtension(protected_app.get()); 258868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->GrantRightsForExtension(unlimited_app.get()); 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(policy_->CanQueryDiskSize(kHttpUrl)); 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_FALSE(policy_->CanQueryDiskSize(kExtensionUrl)); 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(policy_->CanQueryDiskSize(regular_app->url())); 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(policy_->CanQueryDiskSize(protected_app->url())); 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(policy_->CanQueryDiskSize(unlimited_app->url())); 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 267868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(ExtensionSpecialStoragePolicyTest, HasIsolatedStorage) { 268868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const GURL kHttpUrl("http://foo"); 269868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const GURL kExtensionUrl("chrome-extension://bar"); 270868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_refptr<Extension> app(CreateRegularApp()); 271868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->GrantRightsForExtension(app.get()); 272868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 273868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(policy_->HasIsolatedStorage(kHttpUrl)); 274868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(policy_->HasIsolatedStorage(kExtensionUrl)); 275868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(policy_->HasIsolatedStorage(app->url())); 276868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 277868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionSpecialStoragePolicyTest, OverlappingApps) { 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> protected_app(CreateProtectedApp()); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> unlimited_app(CreateUnlimitedApp()); 281868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->GrantRightsForExtension(protected_app.get()); 282868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->GrantRightsForExtension(unlimited_app.get()); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSet protecting_extensions; 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSet empty_set; 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protecting_extensions.Insert(protected_app); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protecting_extensions.Insert(unlimited_app); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("http://explicit/")); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("http://explicit:6000/")); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("https://foo.wildcards/")); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("https://foo.wildcards/")); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("http://bar.wildcards/")); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, GURL("http://not_listed/")); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(policy_->IsStorageUnlimited(GURL("http://explicit/"))); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(policy_->IsStorageUnlimited(GURL("http://explicit:6000/"))); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(policy_->IsStorageUnlimited(GURL("https://foo.wildcards/"))); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(policy_->IsStorageUnlimited(GURL("https://bar.wildcards/"))); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(GURL("http://not_listed/"))); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 300868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->RevokeRightsForExtension(unlimited_app.get()); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protecting_extensions.Remove(unlimited_app->id()); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(GURL("http://explicit/"))); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(GURL("https://foo.wildcards/"))); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->IsStorageUnlimited(GURL("https://bar.wildcards/"))); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("http://explicit/")); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("http://foo.wildcards/")); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(protecting_extensions, GURL("https://bar.wildcards/")); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 309868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->RevokeRightsForExtension(protected_app.get()); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, GURL("http://explicit/")); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, GURL("http://foo.wildcards/")); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectProtectedBy(empty_set, GURL("https://bar.wildcards/")); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ExtensionSpecialStoragePolicyTest, HasSessionOnlyOrigins) { 31690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop message_loop; 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile profile; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = 3217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CookieSettings::Factory::GetForProfile(&profile).get(); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy_ = new ExtensionSpecialStoragePolicy(cookie_settings); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->HasSessionOnlyOrigins()); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The default setting can be session-only. 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings->SetDefaultCookieSetting(CONTENT_SETTING_SESSION_ONLY); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(policy_->HasSessionOnlyOrigins()); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings->SetDefaultCookieSetting(CONTENT_SETTING_ALLOW); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->HasSessionOnlyOrigins()); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Or the session-onlyness can affect individual origins. 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern pattern = 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromString("pattern.com"); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings->SetCookieSetting(pattern, 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard(), 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_SESSION_ONLY); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(policy_->HasSessionOnlyOrigins()); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clearing an origin-specific rule. 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cookie_settings->ResetCookieSetting(pattern, 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::Wildcard()); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(policy_->HasSessionOnlyOrigins()); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ExtensionSpecialStoragePolicyTest, NotificationTest) { 35190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop message_loop; 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::TestBrowserThread io_thread(BrowserThread::IO, &message_loop); 354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PolicyChangeObserver observer; 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policy_->AddObserver(&observer); 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<Extension> apps[] = { 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateProtectedApp(), 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateUnlimitedApp(), 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int change_flags[] = { 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpecialStoragePolicy::STORAGE_PROTECTED, 365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpecialStoragePolicy::STORAGE_PROTECTED | 367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpecialStoragePolicy::STORAGE_UNLIMITED, 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_EQ(arraysize(apps), arraysize(change_flags)); 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < arraysize(apps); ++i) { 372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SCOPED_TRACE(testing::Message() << "i: " << i); 373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observer.ExpectGrant(apps[i]->id(), change_flags[i]); 374868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->GrantRightsForExtension(apps[i].get()); 375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) message_loop.RunUntilIdle(); 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(observer.IsCompleted()); 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < arraysize(apps); ++i) { 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SCOPED_TRACE(testing::Message() << "i: " << i); 381868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->GrantRightsForExtension(apps[i].get()); 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) message_loop.RunUntilIdle(); 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(observer.IsCompleted()); 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < arraysize(apps); ++i) { 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SCOPED_TRACE(testing::Message() << "i: " << i); 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observer.ExpectRevoke(apps[i]->id(), change_flags[i]); 389868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->RevokeRightsForExtension(apps[i].get()); 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) message_loop.RunUntilIdle(); 391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(observer.IsCompleted()); 392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < arraysize(apps); ++i) { 395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SCOPED_TRACE(testing::Message() << "i: " << i); 396868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) policy_->RevokeRightsForExtension(apps[i].get()); 397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) message_loop.RunUntilIdle(); 398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(observer.IsCompleted()); 399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observer.ExpectClear(); 402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policy_->RevokeRightsForAllExtensions(); 403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) message_loop.RunUntilIdle(); 404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(observer.IsCompleted()); 405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policy_->RemoveObserver(&observer); 407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 408