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

Side by Side Diff: extensions/browser/event_router.cc

Issue 344543006: Disable ephemeral apps after they stop running (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed review comments and refactoring Created 6 years, 4 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
« no previous file with comments | « extensions/browser/event_router.h ('k') | extensions/common/extension.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "extensions/browser/event_router.h" 5 #include "extensions/browser/event_router.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "base/stl_util.h" 12 #include "base/stl_util.h"
13 #include "base/values.h" 13 #include "base/values.h"
14 #include "content/public/browser/child_process_security_policy.h" 14 #include "content/public/browser/child_process_security_policy.h"
15 #include "content/public/browser/notification_service.h" 15 #include "content/public/browser/notification_service.h"
16 #include "content/public/browser/render_process_host.h" 16 #include "content/public/browser/render_process_host.h"
17 #include "extensions/browser/api_activity_monitor.h" 17 #include "extensions/browser/api_activity_monitor.h"
18 #include "extensions/browser/extension_host.h" 18 #include "extensions/browser/extension_host.h"
19 #include "extensions/browser/extension_prefs.h" 19 #include "extensions/browser/extension_prefs.h"
20 #include "extensions/browser/extension_registry.h" 20 #include "extensions/browser/extension_registry.h"
21 #include "extensions/browser/extension_system.h" 21 #include "extensions/browser/extension_system.h"
22 #include "extensions/browser/extension_util.h"
23 #include "extensions/browser/extensions_browser_client.h" 22 #include "extensions/browser/extensions_browser_client.h"
24 #include "extensions/browser/lazy_background_task_queue.h" 23 #include "extensions/browser/lazy_background_task_queue.h"
25 #include "extensions/browser/notification_types.h" 24 #include "extensions/browser/notification_types.h"
26 #include "extensions/browser/process_manager.h" 25 #include "extensions/browser/process_manager.h"
27 #include "extensions/browser/process_map.h" 26 #include "extensions/browser/process_map.h"
28 #include "extensions/common/extension.h" 27 #include "extensions/common/extension.h"
29 #include "extensions/common/extension_api.h" 28 #include "extensions/common/extension_api.h"
30 #include "extensions/common/extension_messages.h" 29 #include "extensions/common/extension_messages.h"
31 #include "extensions/common/extension_urls.h" 30 #include "extensions/common/extension_urls.h"
32 #include "extensions/common/manifest_handlers/background_info.h" 31 #include "extensions/common/manifest_handlers/background_info.h"
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 if (!cross_incognito) 621 if (!cross_incognito)
623 return true; 622 return true;
624 return ExtensionsBrowserClient::Get()->CanExtensionCrossIncognito( 623 return ExtensionsBrowserClient::Get()->CanExtensionCrossIncognito(
625 extension, context); 624 extension, context);
626 } 625 }
627 626
628 bool EventRouter::MaybeLoadLazyBackgroundPageToDispatchEvent( 627 bool EventRouter::MaybeLoadLazyBackgroundPageToDispatchEvent(
629 BrowserContext* context, 628 BrowserContext* context,
630 const Extension* extension, 629 const Extension* extension,
631 const linked_ptr<Event>& event) { 630 const linked_ptr<Event>& event) {
632 if (util::IsEphemeralApp(extension->id(), context) &&
633 !event->can_load_ephemeral_apps) {
634 // Most events can only be dispatched to ephemeral apps that are already
635 // running.
636 ProcessManager* pm = ExtensionSystem::Get(context)->process_manager();
637 if (!pm->GetBackgroundHostForExtension(extension->id()))
638 return false;
639 }
640
641 if (!CanDispatchEventToBrowserContext(context, extension, event)) 631 if (!CanDispatchEventToBrowserContext(context, extension, event))
642 return false; 632 return false;
643 633
644 LazyBackgroundTaskQueue* queue = ExtensionSystem::Get( 634 LazyBackgroundTaskQueue* queue = ExtensionSystem::Get(
645 context)->lazy_background_task_queue(); 635 context)->lazy_background_task_queue();
646 if (queue->ShouldEnqueueTask(context, extension)) { 636 if (queue->ShouldEnqueueTask(context, extension)) {
647 linked_ptr<Event> dispatched_event(event); 637 linked_ptr<Event> dispatched_event(event);
648 638
649 // If there's a dispatch callback, call it now (rather than dispatch time) 639 // If there's a dispatch callback, call it now (rather than dispatch time)
650 // to avoid lifetime issues. Use a separate copy of the event args, so they 640 // to avoid lifetime issues. Use a separate copy of the event args, so they
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 NOTREACHED(); 765 NOTREACHED();
776 return; 766 return;
777 } 767 }
778 } 768 }
779 769
780 Event::Event(const std::string& event_name, 770 Event::Event(const std::string& event_name,
781 scoped_ptr<base::ListValue> event_args) 771 scoped_ptr<base::ListValue> event_args)
782 : event_name(event_name), 772 : event_name(event_name),
783 event_args(event_args.Pass()), 773 event_args(event_args.Pass()),
784 restrict_to_browser_context(NULL), 774 restrict_to_browser_context(NULL),
785 user_gesture(EventRouter::USER_GESTURE_UNKNOWN), 775 user_gesture(EventRouter::USER_GESTURE_UNKNOWN) {
786 can_load_ephemeral_apps(false) {
787 DCHECK(this->event_args.get()); 776 DCHECK(this->event_args.get());
788 } 777 }
789 778
790 Event::Event(const std::string& event_name, 779 Event::Event(const std::string& event_name,
791 scoped_ptr<base::ListValue> event_args, 780 scoped_ptr<base::ListValue> event_args,
792 BrowserContext* restrict_to_browser_context) 781 BrowserContext* restrict_to_browser_context)
793 : event_name(event_name), 782 : event_name(event_name),
794 event_args(event_args.Pass()), 783 event_args(event_args.Pass()),
795 restrict_to_browser_context(restrict_to_browser_context), 784 restrict_to_browser_context(restrict_to_browser_context),
796 user_gesture(EventRouter::USER_GESTURE_UNKNOWN), 785 user_gesture(EventRouter::USER_GESTURE_UNKNOWN) {
797 can_load_ephemeral_apps(false) {
798 DCHECK(this->event_args.get()); 786 DCHECK(this->event_args.get());
799 } 787 }
800 788
801 Event::Event(const std::string& event_name, 789 Event::Event(const std::string& event_name,
802 scoped_ptr<ListValue> event_args, 790 scoped_ptr<ListValue> event_args,
803 BrowserContext* restrict_to_browser_context, 791 BrowserContext* restrict_to_browser_context,
804 const GURL& event_url, 792 const GURL& event_url,
805 EventRouter::UserGestureState user_gesture, 793 EventRouter::UserGestureState user_gesture,
806 const EventFilteringInfo& filter_info) 794 const EventFilteringInfo& filter_info)
807 : event_name(event_name), 795 : event_name(event_name),
808 event_args(event_args.Pass()), 796 event_args(event_args.Pass()),
809 restrict_to_browser_context(restrict_to_browser_context), 797 restrict_to_browser_context(restrict_to_browser_context),
810 event_url(event_url), 798 event_url(event_url),
811 user_gesture(user_gesture), 799 user_gesture(user_gesture),
812 filter_info(filter_info), 800 filter_info(filter_info) {
813 can_load_ephemeral_apps(false) {
814 DCHECK(this->event_args.get()); 801 DCHECK(this->event_args.get());
815 } 802 }
816 803
817 Event::~Event() {} 804 Event::~Event() {}
818 805
819 Event* Event::DeepCopy() { 806 Event* Event::DeepCopy() {
820 Event* copy = new Event(event_name, 807 Event* copy = new Event(event_name,
821 scoped_ptr<base::ListValue>(event_args->DeepCopy()), 808 scoped_ptr<base::ListValue>(event_args->DeepCopy()),
822 restrict_to_browser_context, 809 restrict_to_browser_context,
823 event_url, 810 event_url,
824 user_gesture, 811 user_gesture,
825 filter_info); 812 filter_info);
826 copy->will_dispatch_callback = will_dispatch_callback; 813 copy->will_dispatch_callback = will_dispatch_callback;
827 return copy; 814 return copy;
828 } 815 }
829 816
830 EventListenerInfo::EventListenerInfo(const std::string& event_name, 817 EventListenerInfo::EventListenerInfo(const std::string& event_name,
831 const std::string& extension_id, 818 const std::string& extension_id,
832 const GURL& listener_url, 819 const GURL& listener_url,
833 content::BrowserContext* browser_context) 820 content::BrowserContext* browser_context)
834 : event_name(event_name), 821 : event_name(event_name),
835 extension_id(extension_id), 822 extension_id(extension_id),
836 listener_url(listener_url), 823 listener_url(listener_url),
837 browser_context(browser_context) { 824 browser_context(browser_context) {
838 } 825 }
839 826
840 } // namespace extensions 827 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/event_router.h ('k') | extensions/common/extension.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698