From d012be2ba345e689347d409432729472de325cd3 Mon Sep 17 00:00:00 2001 From: "yukishiino@chromium.org" Date: Mon, 3 Mar 2014 17:02:47 +0000 Subject: Makes text input extensions available in guest session on CrOS. The behavioral changes are: 1) Creates background pages of extensions in guest session even if the extension is not "split" mode. Since the guest session has only the off-the-record context and does not have a regular context, we should treat the off-the-record context like the default regular context. Even if the extension is "spanning" mode, creates a background page for the off-the-record context in guest session. Otherwise, extensions in guest session cannot have a background page. 2) Passs key events, etc. to the off-the-record context regardless of whether extensions are enabled in incognito mode or not. The reason is the same. We should treat the off-the-record context as the default regular context in guest session. BUG=339318 TEST=Done manually. 1) Log in as guest, 2) Add Japanese language and enable Google Japanese Input, 3) Activate one of Japanese input method, 4) Type something. Review URL: https://codereview.chromium.org/177533002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@254481 0039d316-1c4b-4281-b951-d872f2087c98 --- extensions/browser/extensions_browser_client.h | 2 +- extensions/browser/process_manager.cc | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) (limited to 'extensions') diff --git a/extensions/browser/extensions_browser_client.h b/extensions/browser/extensions_browser_client.h index 08ffa58..51cff43 100644 --- a/extensions/browser/extensions_browser_client.h +++ b/extensions/browser/extensions_browser_client.h @@ -70,7 +70,7 @@ class ExtensionsBrowserClient { content::BrowserContext* context) = 0; // Returns true if |context| corresponds to a guest session. - virtual bool IsGuestSession(content::BrowserContext* context) = 0; + virtual bool IsGuestSession(content::BrowserContext* context) const = 0; // Returns true if |extension_id| can run in an incognito window. virtual bool IsExtensionIncognitoEnabled( diff --git a/extensions/browser/process_manager.cc b/extensions/browser/process_manager.cc index c2db585..721bc14 100644 --- a/extensions/browser/process_manager.cc +++ b/extensions/browser/process_manager.cc @@ -177,11 +177,21 @@ struct ProcessManager::BackgroundPageData { // static ProcessManager* ProcessManager::Create(BrowserContext* context) { + ExtensionsBrowserClient* client = ExtensionsBrowserClient::Get(); + if (client->IsGuestSession(context)) { + // In the guest session, there is a single off-the-record context. Unlike + // a regular incognito mode, background pages of extensions must be + // created regardless of whether extensions use "spanning" or "split" + // incognito behavior. + BrowserContext* original_context = client->GetOriginalContext(context); + return new ProcessManager(context, original_context); + } + if (context->IsOffTheRecord()) { - BrowserContext* original_context = - ExtensionsBrowserClient::Get()->GetOriginalContext(context); + BrowserContext* original_context = client->GetOriginalContext(context); return new IncognitoProcessManager(context, original_context); } + return new ProcessManager(context, context); } -- cgit v1.1