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

Side by Side Diff: chrome/browser/background/background_contents_service.cc

Issue 12253022: Manifest handler for all keys background-related. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/background/background_contents_service.h" 5 #include "chrome/browser/background/background_contents_service.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
(...skipping 11 matching lines...) Expand all
22 #include "chrome/browser/notifications/notification_ui_manager.h" 22 #include "chrome/browser/notifications/notification_ui_manager.h"
23 #include "chrome/browser/prefs/scoped_user_pref_update.h" 23 #include "chrome/browser/prefs/scoped_user_pref_update.h"
24 #include "chrome/browser/profiles/profile.h" 24 #include "chrome/browser/profiles/profile.h"
25 #include "chrome/browser/ui/browser.h" 25 #include "chrome/browser/ui/browser.h"
26 #include "chrome/browser/ui/browser_finder.h" 26 #include "chrome/browser/ui/browser_finder.h"
27 #include "chrome/browser/ui/browser_tabstrip.h" 27 #include "chrome/browser/ui/browser_tabstrip.h"
28 #include "chrome/browser/ui/host_desktop.h" 28 #include "chrome/browser/ui/host_desktop.h"
29 #include "chrome/common/chrome_notification_types.h" 29 #include "chrome/common/chrome_notification_types.h"
30 #include "chrome/common/chrome_switches.h" 30 #include "chrome/common/chrome_switches.h"
31 #include "chrome/common/extensions/api/icons/icons_handler.h" 31 #include "chrome/common/extensions/api/icons/icons_handler.h"
32 #include "chrome/common/extensions/background_info.h"
32 #include "chrome/common/extensions/extension.h" 33 #include "chrome/common/extensions/extension.h"
33 #include "chrome/common/extensions/extension_constants.h" 34 #include "chrome/common/extensions/extension_constants.h"
34 #include "chrome/common/extensions/extension_icon_set.h" 35 #include "chrome/common/extensions/extension_icon_set.h"
35 #include "chrome/common/pref_names.h" 36 #include "chrome/common/pref_names.h"
36 #include "content/public/browser/notification_service.h" 37 #include "content/public/browser/notification_service.h"
37 #include "content/public/browser/site_instance.h" 38 #include "content/public/browser/site_instance.h"
38 #include "content/public/browser/web_contents.h" 39 #include "content/public/browser/web_contents.h"
39 #include "grit/generated_resources.h" 40 #include "grit/generated_resources.h"
40 #include "ipc/ipc_message.h" 41 #include "ipc/ipc_message.h"
41 #include "ui/base/l10n/l10n_util.h" 42 #include "ui/base/l10n/l10n_util.h"
42 43
43 using content::SiteInstance; 44 using content::SiteInstance;
44 using content::WebContents; 45 using content::WebContents;
46 using extensions::BackgroundInfo;
45 using extensions::Extension; 47 using extensions::Extension;
46 using extensions::UnloadedExtensionInfo; 48 using extensions::UnloadedExtensionInfo;
47 49
48 namespace { 50 namespace {
49 51
50 const char kNotificationPrefix[] = "app.background.crashed."; 52 const char kNotificationPrefix[] = "app.background.crashed.";
51 53
52 void CloseBalloon(const std::string id) { 54 void CloseBalloon(const std::string id) {
53 g_browser_process->notification_ui_manager()->CancelById(id); 55 g_browser_process->notification_ui_manager()->CancelById(id);
54 } 56 }
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 BackgroundContents* bgcontents = 262 BackgroundContents* bgcontents =
261 content::Details<BackgroundContents>(details).ptr(); 263 content::Details<BackgroundContents>(details).ptr();
262 Profile* profile = content::Source<Profile>(source).ptr(); 264 Profile* profile = content::Source<Profile>(source).ptr();
263 const string16& appid = GetParentApplicationId(bgcontents); 265 const string16& appid = GetParentApplicationId(bgcontents);
264 ExtensionService* extension_service = 266 ExtensionService* extension_service =
265 extensions::ExtensionSystem::Get(profile)->extension_service(); 267 extensions::ExtensionSystem::Get(profile)->extension_service();
266 // extension_service can be NULL when running tests. 268 // extension_service can be NULL when running tests.
267 if (extension_service) { 269 if (extension_service) {
268 const Extension* extension = 270 const Extension* extension =
269 extension_service->GetExtensionById(UTF16ToUTF8(appid), false); 271 extension_service->GetExtensionById(UTF16ToUTF8(appid), false);
270 if (extension && extension->has_background_page()) 272 if (extension && BackgroundInfo::HasBackgroundPage(extension))
271 break; 273 break;
272 } 274 }
273 RegisterBackgroundContents(bgcontents); 275 RegisterBackgroundContents(bgcontents);
274 break; 276 break;
275 } 277 }
276 case chrome::NOTIFICATION_EXTENSION_LOADED: { 278 case chrome::NOTIFICATION_EXTENSION_LOADED: {
277 const Extension* extension = 279 const Extension* extension =
278 content::Details<const Extension>(details).ptr(); 280 content::Details<const Extension>(details).ptr();
279 Profile* profile = content::Source<Profile>(source).ptr(); 281 Profile* profile = content::Source<Profile>(source).ptr();
280 if (extension->is_hosted_app() && 282 if (extension->is_hosted_app() &&
281 extension->has_background_page()) { 283 BackgroundInfo::HasBackgroundPage(extension)) {
282 // If there is a background page specified in the manifest for a hosted 284 // If there is a background page specified in the manifest for a hosted
283 // app, then blow away registered urls in the pref. 285 // app, then blow away registered urls in the pref.
284 ShutdownAssociatedBackgroundContents(ASCIIToUTF16(extension->id())); 286 ShutdownAssociatedBackgroundContents(ASCIIToUTF16(extension->id()));
285 287
286 ExtensionService* service = 288 ExtensionService* service =
287 extensions::ExtensionSystem::Get(profile)->extension_service(); 289 extensions::ExtensionSystem::Get(profile)->extension_service();
288 if (service && service->is_ready()) { 290 if (service && service->is_ready()) {
289 // Now load the manifest-specified background page. If service isn't 291 // Now load the manifest-specified background page. If service isn't
290 // ready, then the background page will be loaded from the 292 // ready, then the background page will be loaded from the
291 // EXTENSIONS_READY callback. 293 // EXTENSIONS_READY callback.
292 LoadBackgroundContents(profile, extension->GetBackgroundURL(), 294 LoadBackgroundContents(profile,
293 ASCIIToUTF16("background"), UTF8ToUTF16(extension->id())); 295 BackgroundInfo::GetBackgroundURL(extension),
296 ASCIIToUTF16("background"),
297 UTF8ToUTF16(extension->id()));
294 } 298 }
295 } 299 }
296 300
297 // Remove any "This extension has crashed" balloons. 301 // Remove any "This extension has crashed" balloons.
298 ScheduleCloseBalloon(extension->id()); 302 ScheduleCloseBalloon(extension->id());
299 SendChangeNotification(profile); 303 SendChangeNotification(profile);
300 break; 304 break;
301 } 305 }
302 case chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED: 306 case chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED:
303 case chrome::NOTIFICATION_BACKGROUND_CONTENTS_TERMINATED: { 307 case chrome::NOTIFICATION_BACKGROUND_CONTENTS_TERMINATED: {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 break; 346 break;
343 case extension_misc::UNLOAD_REASON_UPDATE: { 347 case extension_misc::UNLOAD_REASON_UPDATE: {
344 // If there is a manifest specified background page, then shut it down 348 // If there is a manifest specified background page, then shut it down
345 // here, since if the updated extension still has the background page, 349 // here, since if the updated extension still has the background page,
346 // then it will be loaded from LOADED callback. Otherwise, leave 350 // then it will be loaded from LOADED callback. Otherwise, leave
347 // BackgroundContents in place. 351 // BackgroundContents in place.
348 // We don't call SendChangeNotification here - it will be generated 352 // We don't call SendChangeNotification here - it will be generated
349 // from the LOADED callback. 353 // from the LOADED callback.
350 const Extension* extension = 354 const Extension* extension =
351 content::Details<UnloadedExtensionInfo>(details)->extension; 355 content::Details<UnloadedExtensionInfo>(details)->extension;
352 if (extension->has_background_page()) 356 if (BackgroundInfo::HasBackgroundPage(extension))
353 ShutdownAssociatedBackgroundContents(ASCIIToUTF16(extension->id())); 357 ShutdownAssociatedBackgroundContents(ASCIIToUTF16(extension->id()));
354 break; 358 break;
355 } 359 }
356 default: 360 default:
357 NOTREACHED(); 361 NOTREACHED();
358 ShutdownAssociatedBackgroundContents( 362 ShutdownAssociatedBackgroundContents(
359 ASCIIToUTF16(content::Details<UnloadedExtensionInfo>(details)-> 363 ASCIIToUTF16(content::Details<UnloadedExtensionInfo>(details)->
360 extension->id())); 364 extension->id()));
361 break; 365 break;
362 } 366 }
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 } 419 }
416 420
417 void BackgroundContentsService::LoadBackgroundContentsForExtension( 421 void BackgroundContentsService::LoadBackgroundContentsForExtension(
418 Profile* profile, 422 Profile* profile,
419 const std::string& extension_id) { 423 const std::string& extension_id) {
420 // First look if the manifest specifies a background page. 424 // First look if the manifest specifies a background page.
421 const Extension* extension = 425 const Extension* extension =
422 extensions::ExtensionSystem::Get(profile)->extension_service()-> 426 extensions::ExtensionSystem::Get(profile)->extension_service()->
423 GetExtensionById(extension_id, false); 427 GetExtensionById(extension_id, false);
424 DCHECK(!extension || extension->is_hosted_app()); 428 DCHECK(!extension || extension->is_hosted_app());
425 if (extension && extension->has_background_page()) { 429 if (extension && BackgroundInfo::HasBackgroundPage(extension)) {
426 LoadBackgroundContents(profile, 430 LoadBackgroundContents(profile,
427 extension->GetBackgroundURL(), 431 BackgroundInfo::GetBackgroundURL(extension),
428 ASCIIToUTF16("background"), 432 ASCIIToUTF16("background"),
429 UTF8ToUTF16(extension->id())); 433 UTF8ToUTF16(extension->id()));
430 return; 434 return;
431 } 435 }
432 436
433 // Now look in the prefs. 437 // Now look in the prefs.
434 if (!prefs_) 438 if (!prefs_)
435 return; 439 return;
436 const DictionaryValue* contents = 440 const DictionaryValue* contents =
437 prefs_->GetDictionary(prefs::kRegisteredBackgroundContents); 441 prefs_->GetDictionary(prefs::kRegisteredBackgroundContents);
(...skipping 25 matching lines...) Expand all
463 UTF8ToUTF16(extension_id)); 467 UTF8ToUTF16(extension_id));
464 } 468 }
465 469
466 void BackgroundContentsService::LoadBackgroundContentsFromManifests( 470 void BackgroundContentsService::LoadBackgroundContentsFromManifests(
467 Profile* profile) { 471 Profile* profile) {
468 const ExtensionSet* extensions = extensions::ExtensionSystem::Get(profile)-> 472 const ExtensionSet* extensions = extensions::ExtensionSystem::Get(profile)->
469 extension_service()->extensions(); 473 extension_service()->extensions();
470 ExtensionSet::const_iterator iter = extensions->begin(); 474 ExtensionSet::const_iterator iter = extensions->begin();
471 for (; iter != extensions->end(); ++iter) { 475 for (; iter != extensions->end(); ++iter) {
472 const Extension* extension = *iter; 476 const Extension* extension = *iter;
473 if (extension->is_hosted_app() && extension->has_background_page()) { 477 if (extension->is_hosted_app() &&
478 BackgroundInfo::HasBackgroundPage(extension)) {
474 LoadBackgroundContents(profile, 479 LoadBackgroundContents(profile,
475 extension->GetBackgroundURL(), 480 BackgroundInfo::GetBackgroundURL(extension),
476 ASCIIToUTF16("background"), 481 ASCIIToUTF16("background"),
477 UTF8ToUTF16(extension->id())); 482 UTF8ToUTF16(extension->id()));
478 } 483 }
479 } 484 }
480 } 485 }
481 486
482 void BackgroundContentsService::LoadBackgroundContents( 487 void BackgroundContentsService::LoadBackgroundContents(
483 Profile* profile, 488 Profile* profile,
484 const GURL& url, 489 const GURL& url,
485 const string16& frame_name, 490 const string16& frame_name,
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 bool user_gesture, 637 bool user_gesture,
633 bool* was_blocked) { 638 bool* was_blocked) {
634 Browser* browser = chrome::FindLastActiveWithProfile( 639 Browser* browser = chrome::FindLastActiveWithProfile(
635 Profile::FromBrowserContext(new_contents->GetBrowserContext()), 640 Profile::FromBrowserContext(new_contents->GetBrowserContext()),
636 chrome::GetActiveDesktop()); 641 chrome::GetActiveDesktop());
637 if (browser) { 642 if (browser) {
638 chrome::AddWebContents(browser, NULL, new_contents, disposition, 643 chrome::AddWebContents(browser, NULL, new_contents, disposition,
639 initial_pos, user_gesture, was_blocked); 644 initial_pos, user_gesture, was_blocked);
640 } 645 }
641 } 646 }
OLDNEW
« no previous file with comments | « chrome/browser/background/background_application_list_model.cc ('k') | chrome/browser/chrome_content_browser_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698