Commit c71fdba3 authored by limasdf@gmail.com's avatar limasdf@gmail.com

Remove deprecated extension notifications from ApiResourceManager.

And Move api_resource_manager_unittest.cc to extensions_unittests to pass the unittest.(by using ExtensionsTest)

BUG=397164, 354046
TEST=extensions_unittests

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@287485 0039d316-1c4b-4281-b951-d872f2087c98
parent e260af75
......@@ -525,7 +525,6 @@
# http://crbug.com/348066. They are duplicated here because we haven't
# extensions_unittests running in the bots yet. Until that happens,
# they should be kept here.
'../extensions/browser/api/api_resource_manager_unittest.cc',
'../extensions/browser/api/cast_channel/cast_channel_api_unittest.cc',
'../extensions/browser/api/cast_channel/cast_socket_unittest.cc',
'../extensions/browser/api/power/power_api_unittest.cc',
......
......@@ -11,6 +11,7 @@
#include "base/lazy_instance.h"
#include "base/memory/linked_ptr.h"
#include "base/memory/ref_counted.h"
#include "base/scoped_observer.h"
#include "base/threading/non_thread_safe.h"
#include "components/keyed_service/core/keyed_service.h"
#include "content/public/browser/browser_thread.h"
......@@ -19,6 +20,8 @@
#include "content/public/browser/notification_service.h"
#include "extensions/browser/browser_context_keyed_api_factory.h"
#include "extensions/browser/extension_host.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_registry_observer.h"
#include "extensions/browser/notification_types.h"
#include "extensions/common/extension.h"
......@@ -112,13 +115,12 @@ content::BrowserThread::ID TestThreadTraits<T>::thread_id_ =
template <class T, typename ThreadingTraits = NamedThreadTraits<T> >
class ApiResourceManager : public BrowserContextKeyedAPI,
public base::NonThreadSafe,
public content::NotificationObserver {
public content::NotificationObserver,
public ExtensionRegistryObserver {
public:
explicit ApiResourceManager(content::BrowserContext* context)
: data_(new ApiResourceData()) {
registrar_.Add(this,
extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
content::NotificationService::AllSources());
: data_(new ApiResourceData()), extension_registry_observer_(this) {
extension_registry_observer_.Add(ExtensionRegistry::Get(context));
registrar_.Add(this,
extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED,
content::NotificationService::AllSources());
......@@ -185,19 +187,17 @@ class ApiResourceManager : public BrowserContextKeyedAPI,
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE {
switch (type) {
case extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: {
std::string id = content::Details<extensions::UnloadedExtensionInfo>(
details)->extension->id();
data_->InitiateExtensionUnloadedCleanup(id);
break;
}
case extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED: {
DCHECK_EQ(extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED, type);
ExtensionHost* host = content::Details<ExtensionHost>(details).ptr();
data_->InitiateExtensionSuspendedCleanup(host->extension_id());
break;
}
}
// ExtensionRegistryObserver:
virtual void OnExtensionUnloaded(
content::BrowserContext* browser_context,
const Extension* extension,
UnloadedExtensionInfo::Reason reason) OVERRIDE {
data_->InitiateExtensionUnloadedCleanup(extension->id());
}
private:
......@@ -398,6 +398,9 @@ class ApiResourceManager : public BrowserContextKeyedAPI,
content::NotificationRegistrar registrar_;
scoped_refptr<ApiResourceData> data_;
ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
extension_registry_observer_;
};
// With WorkerPoolThreadTraits, ApiResourceManager can be used to manage the
......
......@@ -4,24 +4,30 @@
#include "base/files/file_path.h"
#include "base/strings/string_util.h"
#include "chrome/browser/extensions/extension_function_test_utils.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "extensions/browser/api/api_resource.h"
#include "extensions/browser/api/api_resource_manager.h"
#include "extensions/browser/extensions_test.h"
#include "extensions/common/extension.h"
#include "extensions/common/id_util.h"
#include "extensions/common/test_util.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace utils = extension_function_test_utils;
using content::BrowserThread;
using content::NotificationService;
namespace extensions {
class ApiResourceManagerUnitTest : public testing::Test {
class ApiResourceManagerUnitTest : public ExtensionsTest {
public:
ApiResourceManagerUnitTest()
: notification_service_(NotificationService::Create()) {}
private:
content::TestBrowserThreadBundle thread_bundle_;
scoped_ptr<NotificationService> notification_service_;
};
class FakeApiResource : public ApiResource {
......@@ -35,10 +41,10 @@ class FakeApiResource : public ApiResource {
TEST_F(ApiResourceManagerUnitTest, TwoAppsCannotShareResources) {
scoped_ptr<ApiResourceManager<FakeApiResource> > manager(
new ApiResourceManager<FakeApiResource>(NULL));
scoped_refptr<extensions::Extension> extension_one(
utils::CreateEmptyExtension("one"));
scoped_refptr<extensions::Extension> extension_two(
utils::CreateEmptyExtension("two"));
scoped_refptr<extensions::Extension> extension_one =
test_util::CreateExtensionWithID("one");
scoped_refptr<extensions::Extension> extension_two =
test_util::CreateExtensionWithID("two");
const std::string extension_one_id(extension_one->id());
const std::string extension_two_id(extension_two->id());
......
......@@ -821,6 +821,7 @@
],
'sources': [
'browser/admin_policy_unittest.cc',
'browser/api/api_resource_manager_unittest.cc',
'browser/computed_hashes_unittest.cc',
'browser/content_hash_tree_unittest.cc',
'browser/event_listener_map_unittest.cc',
......
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