OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/lazy_background_task_queue.h" | 5 #include "extensions/browser/lazy_background_task_queue.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "content/public/browser/browser_context.h" | 8 #include "content/public/browser/browser_context.h" |
9 #include "content/public/browser/notification_service.h" | 9 #include "content/public/browser/notification_service.h" |
10 #include "content/public/browser/render_process_host.h" | 10 #include "content/public/browser/render_process_host.h" |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 } | 59 } |
60 | 60 |
61 return false; | 61 return false; |
62 } | 62 } |
63 | 63 |
64 void LazyBackgroundTaskQueue::AddPendingTask( | 64 void LazyBackgroundTaskQueue::AddPendingTask( |
65 content::BrowserContext* browser_context, | 65 content::BrowserContext* browser_context, |
66 const std::string& extension_id, | 66 const std::string& extension_id, |
67 const PendingTask& task) { | 67 const PendingTask& task) { |
68 if (ExtensionsBrowserClient::Get()->IsShuttingDown()) { | 68 if (ExtensionsBrowserClient::Get()->IsShuttingDown()) { |
69 task.Run(NULL); | 69 task.Run(nullptr); |
70 return; | 70 return; |
71 } | 71 } |
72 PendingTasksList* tasks_list = NULL; | 72 PendingTasksList* tasks_list = nullptr; |
73 PendingTasksKey key(browser_context, extension_id); | 73 PendingTasksKey key(browser_context, extension_id); |
74 PendingTasksMap::iterator it = pending_tasks_.find(key); | 74 PendingTasksMap::iterator it = pending_tasks_.find(key); |
75 if (it == pending_tasks_.end()) { | 75 if (it == pending_tasks_.end()) { |
76 tasks_list = new PendingTasksList(); | 76 tasks_list = new PendingTasksList(); |
77 pending_tasks_[key] = linked_ptr<PendingTasksList>(tasks_list); | 77 pending_tasks_[key] = linked_ptr<PendingTasksList>(tasks_list); |
78 | 78 |
79 const Extension* extension = | 79 const Extension* extension = |
80 ExtensionRegistry::Get(browser_context)->enabled_extensions().GetByID( | 80 ExtensionRegistry::Get(browser_context)->enabled_extensions().GetByID( |
81 extension_id); | 81 extension_id); |
82 if (extension && BackgroundInfo::HasLazyBackgroundPage(extension)) { | 82 if (extension && BackgroundInfo::HasLazyBackgroundPage(extension)) { |
83 // If this is the first enqueued task, and we're not waiting for the | 83 // If this is the first enqueued task, and we're not waiting for the |
84 // background page to unload, ensure the background page is loaded. | 84 // background page to unload, ensure the background page is loaded. |
85 ProcessManager* pm = ExtensionSystem::Get( | 85 ProcessManager* pm = ExtensionSystem::Get( |
86 browser_context)->process_manager(); | 86 browser_context)->process_manager(); |
87 pm->IncrementLazyKeepaliveCount(extension); | 87 pm->IncrementLazyKeepaliveCount(extension); |
88 // Creating the background host may fail, e.g. if |profile| is incognito | 88 // Creating the background host may fail, e.g. if |profile| is incognito |
89 // but the extension isn't enabled in incognito mode. | 89 // but the extension isn't enabled in incognito mode. |
90 if (!pm->CreateBackgroundHost( | 90 if (!pm->CreateBackgroundHost( |
91 extension, BackgroundInfo::GetBackgroundURL(extension))) { | 91 extension, BackgroundInfo::GetBackgroundURL(extension))) { |
92 task.Run(NULL); | 92 task.Run(nullptr); |
93 return; | 93 return; |
94 } | 94 } |
95 } | 95 } |
96 } else { | 96 } else { |
97 tasks_list = it->second.get(); | 97 tasks_list = it->second.get(); |
98 } | 98 } |
99 | 99 |
100 tasks_list->push_back(task); | 100 tasks_list->push_back(task); |
101 } | 101 } |
102 | 102 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 case extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED: { | 154 case extensions::NOTIFICATION_EXTENSION_HOST_DESTROYED: { |
155 // Notify consumers about the load failure when the background host dies. | 155 // Notify consumers about the load failure when the background host dies. |
156 // This can happen if the extension crashes. This is not strictly | 156 // This can happen if the extension crashes. This is not strictly |
157 // necessary, since we also unload the extension in that case (which | 157 // necessary, since we also unload the extension in that case (which |
158 // dispatches the tasks below), but is a good extra precaution. | 158 // dispatches the tasks below), but is a good extra precaution. |
159 content::BrowserContext* browser_context = | 159 content::BrowserContext* browser_context = |
160 content::Source<content::BrowserContext>(source).ptr(); | 160 content::Source<content::BrowserContext>(source).ptr(); |
161 ExtensionHost* host = | 161 ExtensionHost* host = |
162 content::Details<ExtensionHost>(details).ptr(); | 162 content::Details<ExtensionHost>(details).ptr(); |
163 if (host->extension_host_type() == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) { | 163 if (host->extension_host_type() == VIEW_TYPE_EXTENSION_BACKGROUND_PAGE) { |
164 ProcessPendingTasks(NULL, browser_context, host->extension()); | 164 ProcessPendingTasks(nullptr, browser_context, host->extension()); |
165 } | 165 } |
166 break; | 166 break; |
167 } | 167 } |
168 default: | 168 default: |
169 NOTREACHED(); | 169 NOTREACHED(); |
170 break; | 170 break; |
171 } | 171 } |
172 } | 172 } |
173 | 173 |
174 void LazyBackgroundTaskQueue::OnExtensionUnloaded( | 174 void LazyBackgroundTaskQueue::OnExtensionUnloaded( |
175 content::BrowserContext* browser_context, | 175 content::BrowserContext* browser_context, |
176 const Extension* extension, | 176 const Extension* extension, |
177 UnloadedExtensionInfo::Reason reason) { | 177 UnloadedExtensionInfo::Reason reason) { |
178 // Notify consumers that the page failed to load. | 178 // Notify consumers that the page failed to load. |
179 ProcessPendingTasks(NULL, browser_context, extension); | 179 ProcessPendingTasks(nullptr, browser_context, extension); |
180 // If this extension is also running in an off-the-record context, notify that | 180 // If this extension is also running in an off-the-record context, notify that |
181 // task queue as well. | 181 // task queue as well. |
182 ExtensionsBrowserClient* browser_client = ExtensionsBrowserClient::Get(); | 182 ExtensionsBrowserClient* browser_client = ExtensionsBrowserClient::Get(); |
183 if (browser_client->HasOffTheRecordContext(browser_context)) { | 183 if (browser_client->HasOffTheRecordContext(browser_context)) { |
184 ProcessPendingTasks(NULL, | 184 ProcessPendingTasks(nullptr, |
185 browser_client->GetOffTheRecordContext(browser_context), | 185 browser_client->GetOffTheRecordContext(browser_context), |
186 extension); | 186 extension); |
187 } | 187 } |
188 } | 188 } |
189 | 189 |
190 } // namespace extensions | 190 } // namespace extensions |
OLD | NEW |