12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/test_extension_environment.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/json/json_writer.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/run_loop.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/values.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/test_extension_system.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sessions/session_tab_helper.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/testing_profile.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/test/test_utils.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/web_contents_tester.h" 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension_builder.h" 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/value_builder.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(USE_AURA) 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/aura/env.h" 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::BrowserThread; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TestExtensionEnvironment::TestExtensionEnvironment() 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) : profile_(new TestingProfile), 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) extension_service_(NULL), 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) extension_prefs_(NULL) { 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(USE_AURA) 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) aura::Env::CreateInstance(true); 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TestExtensionEnvironment::~TestExtensionEnvironment() { 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#if defined(USE_AURA) 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) aura::Env::DeleteInstance(); 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TestingProfile* TestExtensionEnvironment::profile() const { 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return profile_.get(); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TestExtensionSystem* TestExtensionEnvironment::GetExtensionSystem() { 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return static_cast<TestExtensionSystem*>(ExtensionSystem::Get(profile())); 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ExtensionService* TestExtensionEnvironment::GetExtensionService() { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (extension_service_ == NULL) { 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) extension_service_ = GetExtensionSystem()->CreateExtensionService( 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine::ForCurrentProcess(), base::FilePath(), false); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return extension_service_; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)ExtensionPrefs* TestExtensionEnvironment::GetExtensionPrefs() { 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (extension_prefs_ == NULL) { 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) extension_prefs_ = GetExtensionSystem()->CreateExtensionPrefs( 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) CommandLine::ForCurrentProcess(), base::FilePath()); 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return extension_prefs_; 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const Extension* TestExtensionEnvironment::MakeExtension( 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Value& manifest_extra) { 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::DictionaryValue> manifest = DictionaryBuilder() 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Set("name", "Extension") 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Set("version", "1.0") 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Set("manifest_version", 2) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Build(); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue* manifest_extra_dict; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (manifest_extra.GetAsDictionary(&manifest_extra_dict)) { 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) manifest->MergeDictionary(manifest_extra_dict); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string manifest_json; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::JSONWriter::Write(&manifest_extra, &manifest_json); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ADD_FAILURE() << "Expected dictionary; got \"" << manifest_json << "\""; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<Extension> result = 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionBuilder().SetManifest(manifest.Pass()).Build(); 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetExtensionService()->AddExtension(result.get()); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return result.get(); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<content::WebContents> TestExtensionEnvironment::MakeTab() const { 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<content::WebContents> contents( 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContentsTester::CreateTestWebContents(profile(), NULL)); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create a tab id. 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SessionTabHelper::CreateForWebContents(contents.get()); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return contents.Pass(); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions 100