Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(434)

Unified Diff: chrome/browser/background_contents_service.cc

Issue 2866034: Refactor shutdown code to allow win/linux to run after last browser closes. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Uploaded patch that resolves merge issue Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/background_contents_service.cc
diff --git a/chrome/browser/background_contents_service.cc b/chrome/browser/background_contents_service.cc
index f35420b30a51df387f18d966d2d3d6de4d890f73..c10d9d21669178f13c683241bfe4946fde7707de 100644
--- a/chrome/browser/background_contents_service.cc
+++ b/chrome/browser/background_contents_service.cc
@@ -9,7 +9,7 @@
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
-#include "chrome/browser/browser_process.h"
+#include "chrome/browser/browser_list.h"
#include "chrome/browser/extensions/extensions_service.h"
#include "chrome/browser/pref_service.h"
#include "chrome/browser/profile.h"
@@ -39,7 +39,8 @@ const wchar_t kFrameNameKey[] = L"name";
BackgroundContentsService::BackgroundContentsService(
Profile* profile, const CommandLine* command_line)
- : prefs_(NULL) {
+ : prefs_(NULL),
+ always_keep_alive_(command_line->HasSwitch(switches::kKeepAliveForTest)) {
// Don't load/store preferences if the proper switch is not enabled, or if
// the parent profile is off the record.
if (!profile->IsOffTheRecord() &&
@@ -83,6 +84,14 @@ void BackgroundContentsService::StartObserving(Profile* profile) {
// BackgroundContents.
registrar_.Add(this, NotificationType::EXTENSION_UNLOADED,
Source<Profile>(profile));
+
+ if (always_keep_alive_ && !profile->IsOffTheRecord()) {
+ // For testing, keep the browser process alive until there is an explicit
+ // shutdown.
+ registrar_.Add(this, NotificationType::APP_TERMINATING,
+ NotificationService::AllSources());
+ BrowserList::StartKeepAlive();
+ }
}
void BackgroundContentsService::Observe(NotificationType type,
@@ -111,6 +120,11 @@ void BackgroundContentsService::Observe(NotificationType type,
ShutdownAssociatedBackgroundContents(
ASCIIToUTF16(Details<Extension>(details)->id()));
break;
+ case NotificationType::APP_TERMINATING:
+ // Performing an explicit shutdown, so allow the browser process to exit.
+ DCHECK(always_keep_alive_);
+ BrowserList::EndKeepAlive();
+ break;
default:
NOTREACHED();
break;
@@ -172,8 +186,12 @@ void BackgroundContentsService::CreateBackgroundContents(
BackgroundContents* contents = new BackgroundContents(
SiteInstance::CreateSiteInstanceForURL(profile, url), MSG_ROUTING_NONE);
- contents_map_[application_id].contents = contents;
- contents_map_[application_id].frame_name = frame_name;
+ // TODO(atwilson): Change this to send a BACKGROUND_CONTENTS_CREATED
+ // notification when we have a listener outside of BackgroundContentsService.
+ BackgroundContentsOpenedDetails details = {contents,
+ frame_name,
+ application_id};
+ BackgroundContentsOpened(&details);
RenderViewHost* render_view_host = contents->render_view_host();
// TODO(atwilson): Create RenderViews asynchronously to avoid increasing
@@ -233,10 +251,8 @@ void BackgroundContentsService::BackgroundContentsOpened(
BackgroundContentsOpenedDetails* details) {
// If this is the first BackgroundContents loaded, kick ourselves into
// persistent mode.
- // TODO(atwilson): Enable this when we support running with no active windows
- // on all platforms (http://crbug.com/45275).
- // if (contents_map_.empty())
- // g_browser_process->AddRefModule();
+ if (contents_map_.empty())
+ BrowserList::StartKeepAlive();
// Add the passed object to our list. Should not already be tracked.
DCHECK(!IsTracked(details->contents));
@@ -260,10 +276,8 @@ void BackgroundContentsService::BackgroundContentsShutdown(
contents_map_.erase(appid);
// If we have no more BackgroundContents active, then stop keeping the browser
// process alive.
- // TODO(atwilson): Enable this when we support running with no active windows
- // on all platforms (http://crbug.com/45275).
- // if (contents_map_.empty())
- // g_browser_process->ReleaseModule();
+ if (contents_map_.empty())
+ BrowserList::EndKeepAlive();
}
BackgroundContents* BackgroundContentsService::GetAppBackgroundContents(
« no previous file with comments | « chrome/browser/background_contents_service.h ('k') | chrome/browser/background_contents_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698