Commit 6d9b43a5 authored by hanxi's avatar hanxi Committed by Commit bot

This CL introduce DeclarativeUserScriptManager to manager a set of...

This CL introduce DeclarativeUserScriptManager to manager a set of DeclarativeUserScriptMaster objects which were stored in the ExtensionSystemImpl.

With this refactor, it allows the DeclarativeUserScriptManager to take care of the creations of DeclarativeUserScriptMaster objects:
1) It enable the DeclarativeUserScriptManager accept all kinds of input keys and convert them as a uniform format;
2) The manager will assign a unique ID to the consumer who requests a DeclarativeUserScriptMaster object.The consumer can use this ID to do script injection.
(The above two steps will be implemented in another CLs)

This refactor is a part of issue "support DeclarativeContent script injection on <webview>", please refer to a design doc(https://goto.google.com/introduceidforscriptinjection).
BUG=437566

Review URL: https://codereview.chromium.org/796453003

Cr-Commit-Position: refs/heads/master@{#308171}
parent c489fa83
......@@ -11,6 +11,7 @@
#include "base/values.h"
#include "chrome/browser/extensions/api/declarative_content/content_constants.h"
#include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
#include "chrome/browser/extensions/declarative_user_script_manager.h"
#include "chrome/browser/extensions/extension_action.h"
#include "chrome/browser/extensions/extension_action_manager.h"
#include "chrome/browser/extensions/extension_tab_util.h"
......@@ -351,9 +352,9 @@ RequestContentScript::RequestContentScript(
const ScriptData& script_data) {
InitScript(extension, script_data);
master_ =
ExtensionSystem::Get(browser_context)->
GetDeclarativeUserScriptMasterByExtension(extension->id());
master_ = ExtensionSystem::Get(browser_context)
->declarative_user_script_manager()
->GetDeclarativeUserScriptMasterByID(extension->id());
AddScript();
}
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/extensions/declarative_user_script_manager.h"
#include "chrome/browser/extensions/declarative_user_script_master.h"
namespace extensions {
DeclarativeUserScriptManager::DeclarativeUserScriptManager(Profile* profile)
: profile_(profile) {
}
DeclarativeUserScriptManager::~DeclarativeUserScriptManager() {
}
DeclarativeUserScriptMaster*
DeclarativeUserScriptManager::GetDeclarativeUserScriptMasterByID(
const std::string& id) {
UserScriptMasterMap::iterator it = declarative_user_script_masters_.find(id);
if (it != declarative_user_script_masters_.end())
return it->second.get();
linked_ptr<DeclarativeUserScriptMaster> master(
new DeclarativeUserScriptMaster(profile_, id));
declarative_user_script_masters_[id] = master;
return master.get();
}
} // extensions
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_DECLARATIVE_USER_SCRIPT_MANAGER_H_
#define CHROME_BROWSER_EXTENSIONS_DECLARATIVE_USER_SCRIPT_MANAGER_H_
#include <map>
#include "base/macros.h"
#include "base/memory/linked_ptr.h"
class Profile;
namespace extensions {
class DeclarativeUserScriptMaster;
// Manages a set of DeclarativeUserScriptMaster objects for script injections.
class DeclarativeUserScriptManager {
public:
explicit DeclarativeUserScriptManager(Profile* profile);
~DeclarativeUserScriptManager();
// Get the user script master for declarative scripts; if one does not exist,
// a new object will be created.
DeclarativeUserScriptMaster* GetDeclarativeUserScriptMasterByID(
const std::string& id);
private:
using UserScriptMasterMap =
std::map<std::string, linked_ptr<DeclarativeUserScriptMaster>>;
// A map of DeclarativeUserScriptMasters for ids; each master is lazily
// initialized.
UserScriptMasterMap declarative_user_script_masters_;
Profile* profile_;
DISALLOW_COPY_AND_ASSIGN(DeclarativeUserScriptManager);
};
} // extensions
#endif // CHROME_BROWSER_EXTENSIONS_DECLARATIVE_USER_SCRIPT_MANAGER_H_
......@@ -16,7 +16,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/content_settings/cookie_settings.h"
#include "chrome/browser/extensions/component_loader.h"
#include "chrome/browser/extensions/declarative_user_script_master.h"
#include "chrome/browser/extensions/declarative_user_script_manager.h"
#include "chrome/browser/extensions/error_console/error_console.h"
#include "chrome/browser/extensions/extension_error_reporter.h"
#include "chrome/browser/extensions/extension_management.h"
......@@ -302,6 +302,8 @@ void ExtensionSystemImpl::Shared::Init(bool extensions_enabled) {
ExtensionErrorReporter::Init(allow_noisy_errors);
shared_user_script_master_.reset(new SharedUserScriptMaster(profile_));
declarative_user_script_manager_.reset(
new DeclarativeUserScriptManager(profile_));
// ExtensionService depends on RuntimeData.
runtime_data_.reset(new RuntimeData(ExtensionRegistry::Get(profile_)));
......@@ -431,6 +433,11 @@ ExtensionSystemImpl::Shared::shared_user_script_master() {
return shared_user_script_master_.get();
}
DeclarativeUserScriptManager*
ExtensionSystemImpl::Shared::declarative_user_script_manager() {
return declarative_user_script_manager_.get();
}
InfoMap* ExtensionSystemImpl::Shared::info_map() {
if (!extension_info_map_.get())
extension_info_map_ = new InfoMap();
......@@ -462,27 +469,6 @@ ContentVerifier* ExtensionSystemImpl::Shared::content_verifier() {
return content_verifier_.get();
}
DeclarativeUserScriptMaster*
ExtensionSystemImpl::Shared::GetDeclarativeUserScriptMasterByExtension(
const ExtensionId& extension_id) {
DCHECK(ready().is_signaled());
DeclarativeUserScriptMaster* master = NULL;
for (ScopedVector<DeclarativeUserScriptMaster>::iterator it =
declarative_user_script_masters_.begin();
it != declarative_user_script_masters_.end();
++it) {
if ((*it)->extension_id() == extension_id) {
master = *it;
break;
}
}
if (!master) {
master = new DeclarativeUserScriptMaster(profile_, extension_id);
declarative_user_script_masters_.push_back(master);
}
return master;
}
//
// ExtensionSystemImpl
//
......@@ -528,6 +514,11 @@ SharedUserScriptMaster* ExtensionSystemImpl::shared_user_script_master() {
return shared_->shared_user_script_master();
}
DeclarativeUserScriptManager*
ExtensionSystemImpl::declarative_user_script_manager() {
return shared_->declarative_user_script_manager();
}
StateStore* ExtensionSystemImpl::state_store() {
return shared_->state_store();
}
......@@ -572,12 +563,6 @@ scoped_ptr<ExtensionSet> ExtensionSystemImpl::GetDependentExtensions(
extension);
}
DeclarativeUserScriptMaster*
ExtensionSystemImpl::GetDeclarativeUserScriptMasterByExtension(
const ExtensionId& extension_id) {
return shared_->GetDeclarativeUserScriptMasterByExtension(extension_id);
}
void ExtensionSystemImpl::RegisterExtensionWithRequestContexts(
const Extension* extension) {
base::Time install_time;
......
......@@ -9,12 +9,12 @@
#include "extensions/browser/extension_system.h"
#include "extensions/common/one_shot_event.h"
class DeclarativeUserScriptManager;
class Profile;
namespace extensions {
class ContentVerifier;
class DeclarativeUserScriptMaster;
class ExtensionSystemSharedFactory;
class NavigationObserver;
class SharedUserScriptMaster;
......@@ -38,8 +38,9 @@ class ExtensionSystemImpl : public ExtensionSystem {
ExtensionService* extension_service() override; // shared
RuntimeData* runtime_data() override; // shared
ManagementPolicy* management_policy() override; // shared
// shared
SharedUserScriptMaster* shared_user_script_master() override;
SharedUserScriptMaster* shared_user_script_master() override; // shared
DeclarativeUserScriptManager* declarative_user_script_manager()
override; // shared
StateStore* state_store() override; // shared
StateStore* rules_store() override; // shared
LazyBackgroundTaskQueue* lazy_background_task_queue() override; // shared
......@@ -61,9 +62,6 @@ class ExtensionSystemImpl : public ExtensionSystem {
scoped_ptr<ExtensionSet> GetDependentExtensions(
const Extension* extension) override;
DeclarativeUserScriptMaster* GetDeclarativeUserScriptMasterByExtension(
const ExtensionId& extension_id) override; // shared
private:
friend class ExtensionSystemSharedFactory;
......@@ -89,6 +87,7 @@ class ExtensionSystemImpl : public ExtensionSystem {
RuntimeData* runtime_data();
ManagementPolicy* management_policy();
SharedUserScriptMaster* shared_user_script_master();
DeclarativeUserScriptManager* declarative_user_script_manager();
InfoMap* info_map();
LazyBackgroundTaskQueue* lazy_background_task_queue();
EventRouter* event_router();
......@@ -98,9 +97,6 @@ class ExtensionSystemImpl : public ExtensionSystem {
const OneShotEvent& ready() const { return ready_; }
ContentVerifier* content_verifier();
DeclarativeUserScriptMaster* GetDeclarativeUserScriptMasterByExtension(
const ExtensionId& extension_id);
private:
Profile* profile_;
......@@ -118,10 +114,9 @@ class ExtensionSystemImpl : public ExtensionSystem {
// Shared memory region manager for scripts statically declared in extension
// manifests. This region is shared between all extensions.
scoped_ptr<SharedUserScriptMaster> shared_user_script_master_;
// Shared memory region manager for programmatically declared scripts, one
// per extension. Managers are instantiated the first time the declarative
// API is used by an extension to request content scripts.
ScopedVector<DeclarativeUserScriptMaster> declarative_user_script_masters_;
// Manager of a set of DeclarativeUserScript objects for programmatically
// declared scripts.
scoped_ptr<DeclarativeUserScriptManager> declarative_user_script_manager_;
scoped_ptr<RuntimeData> runtime_data_;
// ExtensionService depends on StateStore, Blacklist and RuntimeData.
scoped_ptr<ExtensionService> extension_service_;
......
......@@ -7,7 +7,7 @@
#include "base/command_line.h"
#include "base/prefs/pref_service.h"
#include "chrome/browser/extensions/blacklist.h"
#include "chrome/browser/extensions/declarative_user_script_master.h"
#include "chrome/browser/extensions/declarative_user_script_manager.h"
#include "chrome/browser/extensions/error_console/error_console.h"
#include "chrome/browser/extensions/extension_management.h"
#include "chrome/browser/extensions/extension_service.h"
......@@ -87,6 +87,8 @@ ExtensionService* TestExtensionSystem::CreateExtensionService(
scoped_ptr<TestingValueStore> value_store(new TestingValueStore());
value_store_ = value_store.get();
state_store_.reset(new StateStore(profile_, value_store.Pass()));
declarative_user_script_manager_.reset(
new DeclarativeUserScriptManager(profile_));
management_policy_.reset(new ManagementPolicy());
management_policy_->RegisterProviders(
ExtensionManagementFactory::GetForBrowserContext(profile_)
......@@ -124,6 +126,11 @@ SharedUserScriptMaster* TestExtensionSystem::shared_user_script_master() {
return NULL;
}
DeclarativeUserScriptManager*
TestExtensionSystem::declarative_user_script_manager() {
return declarative_user_script_manager_.get();
}
StateStore* TestExtensionSystem::state_store() {
return state_store_.get();
}
......@@ -171,27 +178,6 @@ scoped_ptr<ExtensionSet> TestExtensionSystem::GetDependentExtensions(
extension);
}
DeclarativeUserScriptMaster*
TestExtensionSystem::GetDeclarativeUserScriptMasterByExtension(
const ExtensionId& extension_id) {
DCHECK(ready().is_signaled());
DeclarativeUserScriptMaster* master = NULL;
for (ScopedVector<DeclarativeUserScriptMaster>::iterator it =
declarative_user_script_masters_.begin();
it != declarative_user_script_masters_.end();
++it) {
if ((*it)->extension_id() == extension_id) {
master = *it;
break;
}
}
if (!master) {
master = new DeclarativeUserScriptMaster(profile_, extension_id);
declarative_user_script_masters_.push_back(master);
}
return master;
}
// static
KeyedService* TestExtensionSystem::Build(content::BrowserContext* profile) {
return new TestExtensionSystem(static_cast<Profile*>(profile));
......
......@@ -23,7 +23,7 @@ class BrowserContext;
}
namespace extensions {
class DeclarativeUserScriptMaster;
class DeclarativeUserScriptManager;
class ExtensionPrefs;
class RuntimeData;
class SharedUserScriptMaster;
......@@ -59,6 +59,7 @@ class TestExtensionSystem : public ExtensionSystem {
RuntimeData* runtime_data() override;
ManagementPolicy* management_policy() override;
SharedUserScriptMaster* shared_user_script_master() override;
DeclarativeUserScriptManager* declarative_user_script_manager() override;
StateStore* state_store() override;
StateStore* rules_store() override;
TestingValueStore* value_store() { return value_store_; }
......@@ -73,8 +74,6 @@ class TestExtensionSystem : public ExtensionSystem {
ContentVerifier* content_verifier() override;
scoped_ptr<ExtensionSet> GetDependentExtensions(
const Extension* extension) override;
DeclarativeUserScriptMaster* GetDeclarativeUserScriptMasterByExtension(
const ExtensionId& extension_id) override;
// Note that you probably want to use base::RunLoop().RunUntilIdle() right
// after this to run all the accumulated tasks.
......@@ -90,7 +89,7 @@ class TestExtensionSystem : public ExtensionSystem {
scoped_ptr<StateStore> state_store_;
// A pointer to the TestingValueStore owned by |state_store_|.
TestingValueStore* value_store_;
ScopedVector<DeclarativeUserScriptMaster> declarative_user_script_masters_;
scoped_ptr<DeclarativeUserScriptManager> declarative_user_script_manager_;
scoped_ptr<ManagementPolicy> management_policy_;
scoped_ptr<RuntimeData> runtime_data_;
scoped_ptr<ExtensionService> extension_service_;
......
......@@ -557,6 +557,8 @@
'browser/extensions/crx_installer.h',
'browser/extensions/data_deleter.cc',
'browser/extensions/data_deleter.h',
'browser/extensions/declarative_user_script_manager.cc',
'browser/extensions/declarative_user_script_manager.h',
'browser/extensions/declarative_user_script_master.cc',
'browser/extensions/declarative_user_script_master.h',
'browser/extensions/dev_mode_bubble_controller.cc',
......
......@@ -30,7 +30,7 @@ class BrowserContext;
namespace extensions {
class ContentVerifier;
class DeclarativeUserScriptMaster;
class DeclarativeUserScriptManager;
class ErrorConsole;
class EventRouter;
class Extension;
......@@ -77,6 +77,9 @@ class ExtensionSystem : public KeyedService {
// The SharedUserScriptMaster is created at startup.
virtual SharedUserScriptMaster* shared_user_script_master() = 0;
// The DeclarativeUserScriptManager is created at startup.
virtual DeclarativeUserScriptManager* declarative_user_script_manager() = 0;
// The StateStore is created at startup.
virtual StateStore* state_store() = 0;
......@@ -128,11 +131,6 @@ class ExtensionSystem : public KeyedService {
// so it can be retrieved from ExtensionSystem directly.
virtual scoped_ptr<ExtensionSet> GetDependentExtensions(
const Extension* extension) = 0;
// Get the user script master for declarative scripts, if any.
virtual DeclarativeUserScriptMaster*
GetDeclarativeUserScriptMasterByExtension(
const ExtensionId& extension_id) = 0;
};
} // namespace extensions
......
......@@ -34,6 +34,11 @@ SharedUserScriptMaster* MockExtensionSystem::shared_user_script_master() {
return nullptr;
}
DeclarativeUserScriptManager*
MockExtensionSystem::declarative_user_script_manager() {
return nullptr;
}
StateStore* MockExtensionSystem::state_store() {
return nullptr;
}
......@@ -74,12 +79,6 @@ ContentVerifier* MockExtensionSystem::content_verifier() {
return nullptr;
}
DeclarativeUserScriptMaster*
MockExtensionSystem::GetDeclarativeUserScriptMasterByExtension(
const ExtensionId& extension_id) {
return nullptr;
}
scoped_ptr<ExtensionSet> MockExtensionSystem::GetDependentExtensions(
const Extension* extension) {
return scoped_ptr<ExtensionSet>();
......
......@@ -33,6 +33,7 @@ class MockExtensionSystem : public ExtensionSystem {
RuntimeData* runtime_data() override;
ManagementPolicy* management_policy() override;
SharedUserScriptMaster* shared_user_script_master() override;
DeclarativeUserScriptManager* declarative_user_script_manager() override;
StateStore* state_store() override;
StateStore* rules_store() override;
InfoMap* info_map() override;
......@@ -45,8 +46,6 @@ class MockExtensionSystem : public ExtensionSystem {
ContentVerifier* content_verifier() override;
scoped_ptr<ExtensionSet> GetDependentExtensions(
const Extension* extension) override;
DeclarativeUserScriptMaster* GetDeclarativeUserScriptMasterByExtension(
const ExtensionId& extension_id) override;
private:
content::BrowserContext* browser_context_;
......
......@@ -106,7 +106,7 @@ void ShellExtensionSystem::InitForRegularProfile(bool extensions_enabled) {
}
ExtensionService* ShellExtensionSystem::extension_service() {
return NULL;
return nullptr;
}
RuntimeData* ShellExtensionSystem::runtime_data() {
......@@ -114,19 +114,24 @@ RuntimeData* ShellExtensionSystem::runtime_data() {
}
ManagementPolicy* ShellExtensionSystem::management_policy() {
return NULL;
return nullptr;
}
SharedUserScriptMaster* ShellExtensionSystem::shared_user_script_master() {
return NULL;
return nullptr;
}
DeclarativeUserScriptManager*
ShellExtensionSystem::declarative_user_script_manager() {
return nullptr;
}
StateStore* ShellExtensionSystem::state_store() {
return NULL;
return nullptr;
}
StateStore* ShellExtensionSystem::rules_store() {
return NULL;
return nullptr;
}
InfoMap* ShellExtensionSystem::info_map() {
......@@ -144,11 +149,11 @@ EventRouter* ShellExtensionSystem::event_router() {
}
ErrorConsole* ShellExtensionSystem::error_console() {
return NULL;
return nullptr;
}
InstallVerifier* ShellExtensionSystem::install_verifier() {
return NULL;
return nullptr;
}
QuotaService* ShellExtensionSystem::quota_service() {
......@@ -177,7 +182,7 @@ const OneShotEvent& ShellExtensionSystem::ready() const {
}
ContentVerifier* ShellExtensionSystem::content_verifier() {
return NULL;
return nullptr;
}
scoped_ptr<ExtensionSet> ShellExtensionSystem::GetDependentExtensions(
......@@ -185,10 +190,4 @@ scoped_ptr<ExtensionSet> ShellExtensionSystem::GetDependentExtensions(
return make_scoped_ptr(new ExtensionSet());
}
DeclarativeUserScriptMaster*
ShellExtensionSystem::GetDeclarativeUserScriptMasterByExtension(
const ExtensionId& extension_id) {
return NULL;
}
} // namespace extensions
......@@ -23,7 +23,7 @@ class BrowserContext;
namespace extensions {
class DeclarativeUserScriptMaster;
class DeclarativeUserScriptManager;
class EventRouter;
class InfoMap;
class LazyBackgroundTaskQueue;
......@@ -57,6 +57,7 @@ class ShellExtensionSystem : public ExtensionSystem {
RuntimeData* runtime_data() override;
ManagementPolicy* management_policy() override;
SharedUserScriptMaster* shared_user_script_master() override;
DeclarativeUserScriptManager* declarative_user_script_manager() override;
StateStore* state_store() override;
StateStore* rules_store() override;
InfoMap* info_map() override;
......@@ -74,8 +75,6 @@ class ShellExtensionSystem : public ExtensionSystem {
ContentVerifier* content_verifier() override;
scoped_ptr<ExtensionSet> GetDependentExtensions(
const Extension* extension) override;
DeclarativeUserScriptMaster* GetDeclarativeUserScriptMasterByExtension(
const ExtensionId& extension_id) override;
private:
content::BrowserContext* browser_context_; // Not owned.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment