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

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

Issue 11054006: Make application shortcuts point to app_host.exe, install App Host during app installation. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fixing crashing ExtensionServiceTest.LoadExtensionsWithPlugins unit test, caused by usage of const … Created 8 years, 1 month 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
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/extensions/unpacked_installer.h" 5 #include "chrome/browser/extensions/unpacked_installer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "base/threading/thread_restrictions.h" 11 #include "base/threading/thread_restrictions.h"
12 #include "chrome/browser/extensions/app_host_installer.h"
12 #include "chrome/browser/extensions/extension_install_prompt.h" 13 #include "chrome/browser/extensions/extension_install_prompt.h"
13 #include "chrome/browser/extensions/extension_install_ui.h" 14 #include "chrome/browser/extensions/extension_install_ui.h"
14 #include "chrome/browser/extensions/extension_prefs.h" 15 #include "chrome/browser/extensions/extension_prefs.h"
15 #include "chrome/browser/extensions/extension_service.h" 16 #include "chrome/browser/extensions/extension_service.h"
16 #include "chrome/browser/extensions/permissions_updater.h" 17 #include "chrome/browser/extensions/permissions_updater.h"
17 #include "chrome/browser/extensions/requirements_checker.h" 18 #include "chrome/browser/extensions/requirements_checker.h"
18 #include "chrome/common/extensions/extension.h" 19 #include "chrome/common/extensions/extension.h"
19 #include "chrome/common/extensions/extension_file_util.h" 20 #include "chrome/common/extensions/extension_file_util.h"
20 #include "content/public/browser/browser_thread.h" 21 #include "content/public/browser/browser_thread.h"
22 #include "grit/generated_resources.h"
21 #include "sync/api/string_ordinal.h" 23 #include "sync/api/string_ordinal.h"
24 #include "ui/base/l10n/l10n_util.h"
22 25
23 using content::BrowserThread; 26 using content::BrowserThread;
24 using extensions::Extension; 27 using extensions::Extension;
25 28
26 namespace { 29 namespace {
27 30
28 const char kUnpackedExtensionsBlacklistedError[] = 31 const char kUnpackedExtensionsBlacklistedError[] =
29 "Loading of unpacked extensions is disabled by the administrator."; 32 "Loading of unpacked extensions is disabled by the administrator.";
30 33
31 // Manages an ExtensionInstallPrompt for a particular extension. 34 // Manages an ExtensionInstallPrompt for a particular extension.
32 class SimpleExtensionLoadPrompt : public ExtensionInstallPrompt::Delegate { 35 class SimpleExtensionLoadPrompt : public ExtensionInstallPrompt::Delegate {
33 public: 36 public:
34 SimpleExtensionLoadPrompt(Profile* profile, 37 SimpleExtensionLoadPrompt(Profile* profile,
35 base::WeakPtr<ExtensionService> extension_service, 38 base::WeakPtr<ExtensionService> extension_service,
36 const Extension* extension); 39 const Extension* extension,
40 const base::Closure& callback);
37 ~SimpleExtensionLoadPrompt(); 41 ~SimpleExtensionLoadPrompt();
38 42
39 void ShowPrompt(); 43 void ShowPrompt();
40 44
41 // ExtensionInstallUI::Delegate 45 // ExtensionInstallUI::Delegate
42 virtual void InstallUIProceed() OVERRIDE; 46 virtual void InstallUIProceed() OVERRIDE;
43 virtual void InstallUIAbort(bool user_initiated) OVERRIDE; 47 virtual void InstallUIAbort(bool user_initiated) OVERRIDE;
44 48
45 private: 49 private:
46 base::WeakPtr<ExtensionService> service_weak_; 50 base::WeakPtr<ExtensionService> service_weak_;
47 scoped_ptr<ExtensionInstallPrompt> install_ui_; 51 scoped_ptr<ExtensionInstallPrompt> install_ui_;
48 scoped_refptr<const Extension> extension_; 52 scoped_refptr<const Extension> extension_;
53 base::Closure callback_;
49 }; 54 };
50 55
51 SimpleExtensionLoadPrompt::SimpleExtensionLoadPrompt( 56 SimpleExtensionLoadPrompt::SimpleExtensionLoadPrompt(
52 Profile* profile, 57 Profile* profile,
53 base::WeakPtr<ExtensionService> extension_service, 58 base::WeakPtr<ExtensionService> extension_service,
54 const Extension* extension) 59 const Extension* extension,
60 const base::Closure& callback)
55 : service_weak_(extension_service), 61 : service_weak_(extension_service),
56 extension_(extension) { 62 extension_(extension),
63 callback_(callback) {
57 install_ui_.reset( 64 install_ui_.reset(
58 ExtensionInstallUI::CreateInstallPromptWithProfile(profile)); 65 ExtensionInstallUI::CreateInstallPromptWithProfile(profile));
59 } 66 }
60 67
61 SimpleExtensionLoadPrompt::~SimpleExtensionLoadPrompt() { 68 SimpleExtensionLoadPrompt::~SimpleExtensionLoadPrompt() {
62 } 69 }
63 70
64 void SimpleExtensionLoadPrompt::ShowPrompt() { 71 void SimpleExtensionLoadPrompt::ShowPrompt() {
65 install_ui_->ConfirmInstall( 72 install_ui_->ConfirmInstall(
66 this, extension_, ExtensionInstallPrompt::GetDefaultShowDialogCallback()); 73 this, extension_, ExtensionInstallPrompt::GetDefaultShowDialogCallback());
67 } 74 }
68 75
69 void SimpleExtensionLoadPrompt::InstallUIProceed() { 76 void SimpleExtensionLoadPrompt::InstallUIProceed() {
70 if (service_weak_.get()) { 77 if (service_weak_.get()) {
71 extensions::PermissionsUpdater perms_updater(service_weak_->profile()); 78 callback_.Run();
72 perms_updater.GrantActivePermissions(extension_, false);
73 service_weak_->OnExtensionInstalled(
74 extension_,
75 syncer::StringOrdinal(),
76 false /* no requirement errors */);
77 } 79 }
78 delete this; 80 delete this;
79 } 81 }
80 82
81 void SimpleExtensionLoadPrompt::InstallUIAbort(bool user_initiated) { 83 void SimpleExtensionLoadPrompt::InstallUIAbort(bool user_initiated) {
82 delete this; 84 delete this;
83 } 85 }
84 86
85 } // namespace 87 } // namespace
86 88
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 return; 250 return;
249 const ExtensionSet* disabled_extensions = 251 const ExtensionSet* disabled_extensions =
250 service_weak_->disabled_extensions(); 252 service_weak_->disabled_extensions();
251 if (service_weak_->show_extensions_prompts() && 253 if (service_weak_->show_extensions_prompts() &&
252 prompt_for_plugins_ && 254 prompt_for_plugins_ &&
253 !extension_->plugins().empty() && 255 !extension_->plugins().empty() &&
254 !disabled_extensions->Contains(extension_->id())) { 256 !disabled_extensions->Contains(extension_->id())) {
255 SimpleExtensionLoadPrompt* prompt = new SimpleExtensionLoadPrompt( 257 SimpleExtensionLoadPrompt* prompt = new SimpleExtensionLoadPrompt(
256 service_weak_->profile(), 258 service_weak_->profile(),
257 service_weak_, 259 service_weak_,
258 extension_); 260 extension_,
261 base::Bind(&UnpackedInstaller::BeginInstall, this));
259 prompt->ShowPrompt(); 262 prompt->ShowPrompt();
260 return; // continues in SimpleExtensionLoadPrompt::InstallPrompt* 263 return; // continues in SimpleExtensionLoadPrompt::InstallPrompt*
261 } 264 }
262 265
266 BeginInstall();
267 }
268
269 void UnpackedInstaller::BeginInstall() {
270 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
271 app_host_installer::InstallAppHostIfNecessary(*extension_,
272 base::Bind(&UnpackedInstaller::OnAppHostInstallation, this));
273 }
274
275 void UnpackedInstaller::OnAppHostInstallation(bool success) {
276 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
277 if (!success) {
278 UnpackedInstaller::ReportExtensionLoadError(
279 l10n_util::GetStringUTF8(IDS_EXTENSION_APP_HOST_INSTALL_ERROR));
280 return;
281 }
282
283 CompleteInstall();
284 }
285
286 void UnpackedInstaller::CompleteInstall() {
287 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
263 PermissionsUpdater perms_updater(service_weak_->profile()); 288 PermissionsUpdater perms_updater(service_weak_->profile());
264 perms_updater.GrantActivePermissions(extension_, false); 289 perms_updater.GrantActivePermissions(extension_, false);
265 service_weak_->OnExtensionInstalled(extension_, 290 service_weak_->OnExtensionInstalled(extension_,
266 syncer::StringOrdinal(), 291 syncer::StringOrdinal(),
267 false /* no requirement errors */); 292 false /* no requirement errors */);
268 } 293 }
269 294
270 } // namespace extensions 295 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698