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

Side by Side Diff: chrome/browser/extensions/extension_service.cc

Issue 22944002: Implementation of the "Redirect URLs to Packaged Apps" feature. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "chrome/browser/extensions/extension_service.h" 5 #include "chrome/browser/extensions/extension_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <iterator> 8 #include <iterator>
9 #include <set> 9 #include <set>
10 10
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 #include "chrome/browser/themes/theme_service_factory.h" 71 #include "chrome/browser/themes/theme_service_factory.h"
72 #include "chrome/browser/ui/webui/favicon_source.h" 72 #include "chrome/browser/ui/webui/favicon_source.h"
73 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h" 73 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h"
74 #include "chrome/browser/ui/webui/theme_source.h" 74 #include "chrome/browser/ui/webui/theme_source.h"
75 #include "chrome/common/child_process_logging.h" 75 #include "chrome/common/child_process_logging.h"
76 #include "chrome/common/chrome_notification_types.h" 76 #include "chrome/common/chrome_notification_types.h"
77 #include "chrome/common/chrome_paths.h" 77 #include "chrome/common/chrome_paths.h"
78 #include "chrome/common/chrome_switches.h" 78 #include "chrome/common/chrome_switches.h"
79 #include "chrome/common/chrome_version_info.h" 79 #include "chrome/common/chrome_version_info.h"
80 #include "chrome/common/extensions/api/plugins/plugins_handler.h" 80 #include "chrome/common/extensions/api/plugins/plugins_handler.h"
81 #include "chrome/common/extensions/api/url_handlers/url_handlers_parser.h"
81 #include "chrome/common/extensions/background_info.h" 82 #include "chrome/common/extensions/background_info.h"
82 #include "chrome/common/extensions/extension.h" 83 #include "chrome/common/extensions/extension.h"
83 #include "chrome/common/extensions/extension_file_util.h" 84 #include "chrome/common/extensions/extension_file_util.h"
84 #include "chrome/common/extensions/extension_manifest_constants.h" 85 #include "chrome/common/extensions/extension_manifest_constants.h"
85 #include "chrome/common/extensions/extension_messages.h" 86 #include "chrome/common/extensions/extension_messages.h"
86 #include "chrome/common/extensions/feature_switch.h" 87 #include "chrome/common/extensions/feature_switch.h"
87 #include "chrome/common/extensions/features/feature.h" 88 #include "chrome/common/extensions/features/feature.h"
88 #include "chrome/common/extensions/incognito_handler.h" 89 #include "chrome/common/extensions/incognito_handler.h"
89 #include "chrome/common/extensions/manifest.h" 90 #include "chrome/common/extensions/manifest.h"
90 #include "chrome/common/extensions/manifest_handlers/app_isolation_info.h" 91 #include "chrome/common/extensions/manifest_handlers/app_isolation_info.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 using extensions::CrxInstaller; 125 using extensions::CrxInstaller;
125 using extensions::Extension; 126 using extensions::Extension;
126 using extensions::ExtensionIdSet; 127 using extensions::ExtensionIdSet;
127 using extensions::ExtensionInfo; 128 using extensions::ExtensionInfo;
128 using extensions::FeatureSwitch; 129 using extensions::FeatureSwitch;
129 using extensions::Manifest; 130 using extensions::Manifest;
130 using extensions::PermissionMessage; 131 using extensions::PermissionMessage;
131 using extensions::PermissionMessages; 132 using extensions::PermissionMessages;
132 using extensions::PermissionSet; 133 using extensions::PermissionSet;
133 using extensions::UnloadedExtensionInfo; 134 using extensions::UnloadedExtensionInfo;
135 using extensions::AppEventRouter;
134 136
135 namespace errors = extension_manifest_errors; 137 namespace errors = extension_manifest_errors;
136 138
137 namespace { 139 namespace {
138 140
139 // Histogram values for logging events related to externally installed 141 // Histogram values for logging events related to externally installed
140 // extensions. 142 // extensions.
141 enum ExternalExtensionEvent { 143 enum ExternalExtensionEvent {
142 EXTERNAL_EXTENSION_INSTALLED = 0, 144 EXTERNAL_EXTENSION_INSTALLED = 0,
143 EXTERNAL_EXTENSION_IGNORED, 145 EXTERNAL_EXTENSION_IGNORED,
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 "Local Extension Settings"; 194 "Local Extension Settings";
193 const char ExtensionService::kSyncAppSettingsDirectoryName[] = 195 const char ExtensionService::kSyncAppSettingsDirectoryName[] =
194 "Sync App Settings"; 196 "Sync App Settings";
195 const char ExtensionService::kSyncExtensionSettingsDirectoryName[] = 197 const char ExtensionService::kSyncExtensionSettingsDirectoryName[] =
196 "Sync Extension Settings"; 198 "Sync Extension Settings";
197 const char ExtensionService::kManagedSettingsDirectoryName[] = 199 const char ExtensionService::kManagedSettingsDirectoryName[] =
198 "Managed Extension Settings"; 200 "Managed Extension Settings";
199 const char ExtensionService::kStateStoreName[] = "Extension State"; 201 const char ExtensionService::kStateStoreName[] = "Extension State";
200 const char ExtensionService::kRulesStoreName[] = "Extension Rules"; 202 const char ExtensionService::kRulesStoreName[] = "Extension Rules";
201 203
204 bool ExtensionService::OnMessageReceived(const IPC::Message& message) {
205 bool handled = true;
206 IPC_BEGIN_MESSAGE_MAP(ExtensionService, message)
207 IPC_MESSAGE_HANDLER(ExtensionHostMsg_OnRedirectUrlToApp,
208 OnRedirectUrlToApp)
209 IPC_MESSAGE_UNHANDLED(handled = false)
210 IPC_END_MESSAGE_MAP()
211 return handled;
212 }
213
202 void ExtensionService::CheckExternalUninstall(const std::string& id) { 214 void ExtensionService::CheckExternalUninstall(const std::string& id) {
203 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 215 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
204 216
205 // Check if the providers know about this extension. 217 // Check if the providers know about this extension.
206 extensions::ProviderCollection::const_iterator i; 218 extensions::ProviderCollection::const_iterator i;
207 for (i = external_extension_providers_.begin(); 219 for (i = external_extension_providers_.begin();
208 i != external_extension_providers_.end(); ++i) { 220 i != external_extension_providers_.end(); ++i) {
209 DCHECK(i->get()->IsReady()); 221 DCHECK(i->get()->IsReady());
210 if (i->get()->HasExtension(id)) 222 if (i->get()->HasExtension(id))
211 return; // Yup, known extension, don't uninstall. 223 return; // Yup, known extension, don't uninstall.
(...skipping 2274 matching lines...) Expand 10 before | Expand all | Expand 10 after
2486 const Extension* extension = extensions_.GetExtensionOrAppByURL( 2498 const Extension* extension = extensions_.GetExtensionOrAppByURL(
2487 ExtensionURLInfo(*url)); 2499 ExtensionURLInfo(*url));
2488 if (extension && extension->is_platform_app()) { 2500 if (extension && extension->is_platform_app()) {
2489 *url = GURL(chrome::kExtensionInvalidRequestURL); 2501 *url = GURL(chrome::kExtensionInvalidRequestURL);
2490 return true; 2502 return true;
2491 } 2503 }
2492 2504
2493 return false; 2505 return false;
2494 } 2506 }
2495 2507
2508 bool ExtensionService::MaybeRedirectUrlToApp(const GURL& url,
2509 const GURL& referrer_url) {
2510 // NOTE: The current API spec enforces at most a single app matching a URL.
2511 // TODO: Actually implement the above-mentioned enforcement.
2512 const extensions::UrlHandlerInfo* handler =
2513 extensions_.GetHandlingAppForURL(url);
2514 if (handler) {
2515 CHECK(handler->app->is_platform_app());
2516 extensions::AppEventRouter::DispatchOnLaunchedEventWithURL(
2517 profile_, handler->app, handler->id, url, referrer_url);
2518 return true;
2519 }
2520
2521 return false;
2522 }
2523
2524 void ExtensionService::OnRedirectUrlToApp(const std::string& app_id,
2525 const std::string& handler_id,
2526 const GURL& url,
2527 const GURL& referrer_url) {
2528 const Extension* app = GetExtensionById(app_id, true);
2529 if (app) {
2530 CHECK(app->is_platform_app());
asargent_no_longer_on_chrome 2013/08/14 18:05:12 Note that a renderer process could be compromised,
sergeygs 2013/08/18 11:40:24 After more careful thinking, this should have been
2531 extensions::AppEventRouter::DispatchOnLaunchedEventWithURL(
2532 profile_, app, handler_id, url, referrer_url);
2533 }
2534 }
2535
2496 bool ExtensionService::OnExternalExtensionFileFound( 2536 bool ExtensionService::OnExternalExtensionFileFound(
2497 const std::string& id, 2537 const std::string& id,
2498 const Version* version, 2538 const Version* version,
2499 const base::FilePath& path, 2539 const base::FilePath& path,
2500 Manifest::Location location, 2540 Manifest::Location location,
2501 int creation_flags, 2541 int creation_flags,
2502 bool mark_acknowledged) { 2542 bool mark_acknowledged) {
2503 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2543 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2504 CHECK(Extension::IdIsValid(id)); 2544 CHECK(Extension::IdIsValid(id));
2505 if (extension_prefs_->IsExternalExtensionUninstalled(id)) 2545 if (extension_prefs_->IsExternalExtensionUninstalled(id))
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after
3084 } 3124 }
3085 3125
3086 void ExtensionService::AddUpdateObserver(extensions::UpdateObserver* observer) { 3126 void ExtensionService::AddUpdateObserver(extensions::UpdateObserver* observer) {
3087 update_observers_.AddObserver(observer); 3127 update_observers_.AddObserver(observer);
3088 } 3128 }
3089 3129
3090 void ExtensionService::RemoveUpdateObserver( 3130 void ExtensionService::RemoveUpdateObserver(
3091 extensions::UpdateObserver* observer) { 3131 extensions::UpdateObserver* observer) {
3092 update_observers_.RemoveObserver(observer); 3132 update_observers_.RemoveObserver(observer);
3093 } 3133 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698