settings_test_util.cc revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
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) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/storage/settings_test_util.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/storage/settings_frontend.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_system_factory.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/extensions/extension.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace settings_test_util { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Intended as a StorageCallback from GetStorage. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void AssignStorage(ValueStore** dst, ValueStore* src) { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *dst = src; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueStore* GetStorage( 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings_namespace::Namespace settings_namespace, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettingsFrontend* frontend) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ValueStore* storage = NULL; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) frontend->RunWithStorage( 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_id, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings_namespace, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&AssignStorage, &storage)); 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return storage; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueStore* GetStorage( 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, SettingsFrontend* frontend) { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetStorage(extension_id, settings_namespace::SYNC, frontend); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MockExtensionService 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockExtensionService::MockExtensionService() {} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockExtensionService::~MockExtensionService() {} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const Extension* MockExtensionService::GetExtensionById( 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& id, bool include_disabled) const { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<std::string, scoped_refptr<Extension> >::const_iterator 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) maybe_extension = extensions_.find(id); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return maybe_extension == extensions_.end() ? 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL : maybe_extension->second.get(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockExtensionService::AddExtensionWithId( 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& id, Manifest::Type type) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> empty_permissions; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddExtensionWithIdAndPermissions(id, type, empty_permissions); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MockExtensionService::AddExtensionWithIdAndPermissions( 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& id, 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Manifest::Type type, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::set<std::string>& permissions_set) { 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue manifest; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.SetString("name", std::string("Test extension ") + id); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.SetString("version", "1.0"); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::ListValue> permissions(new base::ListValue()); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::set<std::string>::const_iterator it = permissions_set.begin(); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != permissions_set.end(); ++it) { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permissions->Append(Value::CreateStringValue(*it)); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.Set("permissions", permissions.release()); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case Manifest::TYPE_EXTENSION: 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case Manifest::TYPE_LEGACY_PACKAGED_APP: { 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue* app = new base::DictionaryValue(); 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue* app_launch = new base::DictionaryValue(); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_launch->SetString("local_path", "fake.html"); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app->Set("launch", app_launch); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest.Set("app", app); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> extension(Extension::Create( 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(), 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Manifest::INTERNAL, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Extension::NO_FLAGS, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) id, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &error)); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(extension.get()); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(error.empty()); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions_[id] = extension; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::set<std::string>::const_iterator it = permissions_set.begin(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != permissions_set.end(); ++it) { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(extension->HasAPIPermission(*it)); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MockExtensionSystem 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockExtensionSystem::MockExtensionSystem(Profile* profile) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : TestExtensionSystem(profile) {} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockExtensionSystem::~MockExtensionSystem() {} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EventRouter* MockExtensionSystem::event_router() { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!event_router_.get()) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event_router_.reset(new EventRouter(profile_, NULL)); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return event_router_.get(); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ExtensionService* MockExtensionSystem::extension_service() { 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionServiceInterface* as_interface = 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<ExtensionServiceInterface*>(&extension_service_); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return static_cast<ExtensionService*>(as_interface); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)BrowserContextKeyedService* BuildMockExtensionSystem( 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::BrowserContext* profile) { 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return new MockExtensionSystem(static_cast<Profile*>(profile)); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MockProfile 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)MockProfile::MockProfile(const base::FilePath& file_path) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : TestingProfile(file_path) { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSystemFactory::GetInstance()->SetTestingFactoryAndUse(this, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &BuildMockExtensionSystem); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockProfile::~MockProfile() {} 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ScopedSettingsFactory 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScopedSettingsStorageFactory::ScopedSettingsStorageFactory() {} 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScopedSettingsStorageFactory::ScopedSettingsStorageFactory( 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const scoped_refptr<SettingsStorageFactory>& delegate) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : delegate_(delegate) {} 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScopedSettingsStorageFactory::~ScopedSettingsStorageFactory() {} 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ScopedSettingsStorageFactory::Reset( 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const scoped_refptr<SettingsStorageFactory>& delegate) { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_ = delegate; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ValueStore* ScopedSettingsStorageFactory::Create( 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& base_path, 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& extension_id) { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(delegate_.get()); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return delegate_->Create(base_path, extension_id); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace settings_test_util 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 167