summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
diff options
context:
space:
mode:
authorasargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-04 05:55:17 +0000
committerasargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-04 05:55:17 +0000
commit94b4ffcdc5127a860ca87e017478465231f4fcb7 (patch)
tree1de32abcb06a9d14a34a7dac21e3ae2030e3666b /chrome/browser/extensions
parent5243ecdcbec0afd366bcf6956aad5db762a2105c (diff)
downloadchromium_src-94b4ffcdc5127a860ca87e017478465231f4fcb7.zip
chromium_src-94b4ffcdc5127a860ca87e017478465231f4fcb7.tar.gz
chromium_src-94b4ffcdc5127a860ca87e017478465231f4fcb7.tar.bz2
Avoid crashes due to GetDefaultRequestContext returning NULL.
The change involves two things: check the return value of Profile::GetDefaultRequestContext for NULL, and also shutting down the ExtensionUpdater a little earlier than before (when the profile is being destructed, instead of at ExtensionService destruction time). BUG=70887 TEST=none Review URL: http://codereview.chromium.org/6368084 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@73764 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions')
-rw-r--r--chrome/browser/extensions/extension_service.cc7
-rw-r--r--chrome/browser/extensions/extension_service.h2
-rw-r--r--chrome/browser/extensions/extension_updater.cc5
-rw-r--r--chrome/browser/extensions/extension_updater_unittest.cc10
4 files changed, 16 insertions, 8 deletions
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 51b654a..ef2b2a4 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -484,9 +484,7 @@ bool ExtensionService::HasInstalledExtensions() {
ExtensionService::~ExtensionService() {
DCHECK(!profile_); // Profile should have told us it's going away.
UnloadAllExtensions();
- if (updater_.get()) {
- updater_->Stop();
- }
+
ProviderCollection::const_iterator i;
for (i = external_extension_providers_.begin();
i != external_extension_providers_.end(); ++i) {
@@ -1247,6 +1245,9 @@ void ExtensionService::UpdateExtensionBlacklist(
}
void ExtensionService::DestroyingProfile() {
+ if (updater_.get()) {
+ updater_->Stop();
+ }
browser_event_router_.reset();
pref_change_registrar_.RemoveAll();
profile_ = NULL;
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h
index 8d060a0..46cae33 100644
--- a/chrome/browser/extensions/extension_service.h
+++ b/chrome/browser/extensions/extension_service.h
@@ -7,6 +7,7 @@
#pragma once
#include <map>
+#include <set>
#include <string>
#include <vector>
@@ -93,6 +94,7 @@ class ExtensionUpdateService {
virtual bool HasInstalledExtensions() = 0;
virtual ExtensionPrefs* extension_prefs() = 0;
+ virtual Profile* profile() = 0;
};
// Manages installed and running Chromium extensions.
diff --git a/chrome/browser/extensions/extension_updater.cc b/chrome/browser/extensions/extension_updater.cc
index 88a9992..8e8aa72 100644
--- a/chrome/browser/extensions/extension_updater.cc
+++ b/chrome/browser/extensions/extension_updater.cc
@@ -910,7 +910,8 @@ void ExtensionUpdater::StartUpdateCheck(ManifestFetchData* fetch_data) {
manifest_fetcher_.reset(
URLFetcher::Create(kManifestFetcherId, fetch_data->full_url(),
URLFetcher::GET, this));
- manifest_fetcher_->set_request_context(Profile::GetDefaultRequestContext());
+ manifest_fetcher_->set_request_context(
+ service_->profile()->GetRequestContext());
manifest_fetcher_->set_load_flags(net::LOAD_DO_NOT_SEND_COOKIES |
net::LOAD_DO_NOT_SAVE_COOKIES |
net::LOAD_DISABLE_CACHE);
@@ -938,7 +939,7 @@ void ExtensionUpdater::FetchUpdatedExtension(const std::string& id,
extension_fetcher_.reset(
URLFetcher::Create(kExtensionFetcherId, url, URLFetcher::GET, this));
extension_fetcher_->set_request_context(
- Profile::GetDefaultRequestContext());
+ service_->profile()->GetRequestContext());
extension_fetcher_->set_load_flags(net::LOAD_DO_NOT_SEND_COOKIES |
net::LOAD_DO_NOT_SAVE_COOKIES |
net::LOAD_DISABLE_CACHE);
diff --git a/chrome/browser/extensions/extension_updater_unittest.cc b/chrome/browser/extensions/extension_updater_unittest.cc
index aca27e4..cb992af8 100644
--- a/chrome/browser/extensions/extension_updater_unittest.cc
+++ b/chrome/browser/extensions/extension_updater_unittest.cc
@@ -23,6 +23,7 @@
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/net/test_url_fetcher_factory.h"
+#include "chrome/test/testing_profile.h"
#include "net/base/escape.h"
#include "net/base/load_flags.h"
#include "net/url_request/url_request_status.h"
@@ -46,7 +47,9 @@ int expected_load_flags =
// Base class for further specialized test classes.
class MockService : public ExtensionUpdateService {
public:
- MockService() {}
+ MockService() {
+ profile_.CreateRequestContext();
+ }
virtual ~MockService() {}
virtual const ExtensionList* extensions() const {
@@ -86,6 +89,8 @@ class MockService : public ExtensionUpdateService {
virtual ExtensionPrefs* extension_prefs() { return prefs_.prefs(); }
+ virtual Profile* profile() { return &profile_; }
+
PrefService* pref_service() { return prefs_.pref_service(); }
// Creates test extensions and inserts them into list. The name and
@@ -114,6 +119,7 @@ class MockService : public ExtensionUpdateService {
protected:
PendingExtensionMap pending_extensions_;
TestExtensionPrefs prefs_;
+ TestingProfile profile_;
private:
DISALLOW_COPY_AND_ASSIGN(MockService);
@@ -1066,8 +1072,6 @@ TEST(ExtensionUpdaterTest, TestAfterStopBehavior) {
// TODO(asargent) - (http://crbug.com/12780) add tests for:
// -prodversionmin (shouldn't update if browser version too old)
// -manifests & updates arriving out of order / interleaved
-// -Profile::GetDefaultRequestContext() returning null
-// (should not crash, but just do check later)
// -malformed update url (empty, file://, has query, has a # fragment, etc.)
// -An extension gets uninstalled while updates are in progress (so it doesn't
// "come back from the dead")