OLD | NEW |
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/extension_install_prompt.h" | 5 #include "chrome/browser/extensions/extension_install_prompt.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
(...skipping 26 matching lines...) Expand all Loading... |
37 #include "grit/generated_resources.h" | 37 #include "grit/generated_resources.h" |
38 #include "grit/theme_resources.h" | 38 #include "grit/theme_resources.h" |
39 #include "ui/base/l10n/l10n_util.h" | 39 #include "ui/base/l10n/l10n_util.h" |
40 #include "ui/base/resource/resource_bundle.h" | 40 #include "ui/base/resource/resource_bundle.h" |
41 #include "ui/gfx/image/image.h" | 41 #include "ui/gfx/image/image.h" |
42 | 42 |
43 using extensions::BundleInstaller; | 43 using extensions::BundleInstaller; |
44 using extensions::Extension; | 44 using extensions::Extension; |
45 using extensions::PermissionSet; | 45 using extensions::PermissionSet; |
46 | 46 |
| 47 namespace { |
| 48 |
47 static const int kTitleIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { | 49 static const int kTitleIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { |
48 0, // The regular install prompt depends on what's being installed. | 50 0, // The regular install prompt depends on what's being installed. |
49 IDS_EXTENSION_INLINE_INSTALL_PROMPT_TITLE, | 51 IDS_EXTENSION_INLINE_INSTALL_PROMPT_TITLE, |
50 IDS_EXTENSION_INSTALL_PROMPT_TITLE, | 52 IDS_EXTENSION_INSTALL_PROMPT_TITLE, |
51 IDS_EXTENSION_RE_ENABLE_PROMPT_TITLE, | 53 IDS_EXTENSION_RE_ENABLE_PROMPT_TITLE, |
52 IDS_EXTENSION_PERMISSIONS_PROMPT_TITLE | 54 IDS_EXTENSION_PERMISSIONS_PROMPT_TITLE, |
| 55 IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_TITLE, |
53 }; | 56 }; |
54 static const int kHeadingIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { | 57 static const int kHeadingIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { |
55 IDS_EXTENSION_INSTALL_PROMPT_HEADING, | 58 IDS_EXTENSION_INSTALL_PROMPT_HEADING, |
56 0, // Inline installs use the extension name. | 59 0, // Inline installs use the extension name. |
57 0, // Heading for bundle installs depends on the bundle contents. | 60 0, // Heading for bundle installs depends on the bundle contents. |
58 IDS_EXTENSION_RE_ENABLE_PROMPT_HEADING, | 61 IDS_EXTENSION_RE_ENABLE_PROMPT_HEADING, |
59 IDS_EXTENSION_PERMISSIONS_PROMPT_HEADING | 62 IDS_EXTENSION_PERMISSIONS_PROMPT_HEADING, |
| 63 IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_HEADING, |
60 }; | 64 }; |
61 static const int kAcceptButtonIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { | 65 static const int kAcceptButtonIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { |
62 IDS_EXTENSION_PROMPT_INSTALL_BUTTON, | 66 IDS_EXTENSION_PROMPT_INSTALL_BUTTON, |
63 IDS_EXTENSION_PROMPT_INSTALL_BUTTON, | 67 IDS_EXTENSION_PROMPT_INSTALL_BUTTON, |
64 IDS_EXTENSION_PROMPT_INSTALL_BUTTON, | 68 IDS_EXTENSION_PROMPT_INSTALL_BUTTON, |
65 IDS_EXTENSION_PROMPT_RE_ENABLE_BUTTON, | 69 IDS_EXTENSION_PROMPT_RE_ENABLE_BUTTON, |
66 IDS_EXTENSION_PROMPT_PERMISSIONS_BUTTON | 70 IDS_EXTENSION_PROMPT_PERMISSIONS_BUTTON, |
| 71 IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ACCEPT_BUTTON, |
67 }; | 72 }; |
68 static const int kAbortButtonIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { | 73 static const int kAbortButtonIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { |
69 0, // These all use the platform's default cancel label. | 74 0, // These all use the platform's default cancel label. |
70 0, | 75 0, |
71 0, | 76 0, |
72 0, | 77 0, |
73 IDS_EXTENSION_PROMPT_PERMISSIONS_ABORT_BUTTON | 78 IDS_EXTENSION_PROMPT_PERMISSIONS_ABORT_BUTTON, |
| 79 IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ABORT_BUTTON, |
74 }; | 80 }; |
75 static const int kPermissionsHeaderIds[ | 81 static const int kPermissionsHeaderIds[ |
76 ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { | 82 ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { |
77 IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO, | 83 IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO, |
78 IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO, | 84 IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO, |
79 IDS_EXTENSION_PROMPT_THESE_WILL_HAVE_ACCESS_TO, | 85 IDS_EXTENSION_PROMPT_THESE_WILL_HAVE_ACCESS_TO, |
80 IDS_EXTENSION_PROMPT_WILL_NOW_HAVE_ACCESS_TO, | 86 IDS_EXTENSION_PROMPT_WILL_NOW_HAVE_ACCESS_TO, |
81 IDS_EXTENSION_PROMPT_WANTS_ACCESS_TO, | 87 IDS_EXTENSION_PROMPT_WANTS_ACCESS_TO, |
| 88 IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO, |
82 }; | 89 }; |
83 static const int kOAuthHeaderIds[ | 90 static const int kOAuthHeaderIds[ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { |
84 ExtensionInstallPrompt::NUM_PROMPT_TYPES] = { | |
85 IDS_EXTENSION_PROMPT_OAUTH_HEADER, | 91 IDS_EXTENSION_PROMPT_OAUTH_HEADER, |
86 0, // Inline installs don't show OAuth permissions. | 92 0, // Inline installs don't show OAuth permissions. |
87 0, // Bundle installs don't show OAuth permissions. | 93 0, // Bundle installs don't show OAuth permissions. |
88 IDS_EXTENSION_PROMPT_OAUTH_REENABLE_HEADER, | 94 IDS_EXTENSION_PROMPT_OAUTH_REENABLE_HEADER, |
89 IDS_EXTENSION_PROMPT_OAUTH_PERMISSIONS_HEADER, | 95 IDS_EXTENSION_PROMPT_OAUTH_PERMISSIONS_HEADER, |
| 96 // TODO(mpcomplete): Do we need this for external install UI? If we do, |
| 97 // we need to update FetchOAuthIssueAdviceIfNeeded. |
| 98 0, |
90 }; | 99 }; |
91 | 100 |
92 namespace { | |
93 | |
94 // Size of extension icon in top left of dialog. | 101 // Size of extension icon in top left of dialog. |
95 const int kIconSize = 69; | 102 const int kIconSize = 69; |
96 | 103 |
97 // Returns pixel size under maximal scale factor for the icon whose device | 104 // Returns pixel size under maximal scale factor for the icon whose device |
98 // independent size is |size_in_dip| | 105 // independent size is |size_in_dip| |
99 int GetSizeForMaxScaleFactor(int size_in_dip) { | 106 int GetSizeForMaxScaleFactor(int size_in_dip) { |
100 std::vector<ui::ScaleFactor> supported_scale_factors = | 107 std::vector<ui::ScaleFactor> supported_scale_factors = |
101 ui::GetSupportedScaleFactors(); | 108 ui::GetSupportedScaleFactors(); |
102 // Scale factors are in ascending order, so the last one is the one we need. | 109 // Scale factors are in ascending order, so the last one is the one we need. |
103 ui::ScaleFactor max_scale_factor = supported_scale_factors.back(); | 110 ui::ScaleFactor max_scale_factor = supported_scale_factors.back(); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 string16 ExtensionInstallPrompt::Prompt::GetDialogTitle() const { | 196 string16 ExtensionInstallPrompt::Prompt::GetDialogTitle() const { |
190 int resource_id = kTitleIds[type_]; | 197 int resource_id = kTitleIds[type_]; |
191 | 198 |
192 if (type_ == INSTALL_PROMPT) { | 199 if (type_ == INSTALL_PROMPT) { |
193 if (extension_->is_app()) | 200 if (extension_->is_app()) |
194 resource_id = IDS_EXTENSION_INSTALL_APP_PROMPT_TITLE; | 201 resource_id = IDS_EXTENSION_INSTALL_APP_PROMPT_TITLE; |
195 else if (extension_->is_theme()) | 202 else if (extension_->is_theme()) |
196 resource_id = IDS_EXTENSION_INSTALL_THEME_PROMPT_TITLE; | 203 resource_id = IDS_EXTENSION_INSTALL_THEME_PROMPT_TITLE; |
197 else | 204 else |
198 resource_id = IDS_EXTENSION_INSTALL_EXTENSION_PROMPT_TITLE; | 205 resource_id = IDS_EXTENSION_INSTALL_EXTENSION_PROMPT_TITLE; |
| 206 } else if (type_ == EXTERNAL_INSTALL_PROMPT) { |
| 207 return l10n_util::GetStringFUTF16( |
| 208 resource_id, UTF8ToUTF16(extension_->name())); |
199 } | 209 } |
200 | 210 |
201 return l10n_util::GetStringUTF16(resource_id); | 211 return l10n_util::GetStringUTF16(resource_id); |
202 } | 212 } |
203 | 213 |
204 string16 ExtensionInstallPrompt::Prompt::GetHeading() const { | 214 string16 ExtensionInstallPrompt::Prompt::GetHeading() const { |
205 if (type_ == INLINE_INSTALL_PROMPT) { | 215 if (type_ == INLINE_INSTALL_PROMPT) { |
206 return UTF8ToUTF16(extension_->name()); | 216 return UTF8ToUTF16(extension_->name()); |
207 } else if (type_ == BUNDLE_INSTALL_PROMPT) { | 217 } else if (type_ == BUNDLE_INSTALL_PROMPT) { |
208 return bundle_->GetHeadingTextFor(BundleInstaller::Item::STATE_PENDING); | 218 return bundle_->GetHeadingTextFor(BundleInstaller::Item::STATE_PENDING); |
| 219 } else if (type_ == EXTERNAL_INSTALL_PROMPT) { |
| 220 return l10n_util::GetStringUTF16(kHeadingIds[type_]); |
209 } else { | 221 } else { |
210 return l10n_util::GetStringFUTF16( | 222 return l10n_util::GetStringFUTF16( |
211 kHeadingIds[type_], UTF8ToUTF16(extension_->name())); | 223 kHeadingIds[type_], UTF8ToUTF16(extension_->name())); |
212 } | 224 } |
213 } | 225 } |
214 | 226 |
215 string16 ExtensionInstallPrompt::Prompt::GetAcceptButtonLabel() const { | 227 string16 ExtensionInstallPrompt::Prompt::GetAcceptButtonLabel() const { |
216 return l10n_util::GetStringUTF16(kAcceptButtonIds[type_]); | 228 return l10n_util::GetStringUTF16(kAcceptButtonIds[type_]); |
217 } | 229 } |
218 | 230 |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 const Extension* extension) { | 437 const Extension* extension) { |
426 DCHECK(ui_loop_ == MessageLoop::current()); | 438 DCHECK(ui_loop_ == MessageLoop::current()); |
427 extension_ = extension; | 439 extension_ = extension; |
428 permissions_ = extension->GetActivePermissions(); | 440 permissions_ = extension->GetActivePermissions(); |
429 delegate_ = delegate; | 441 delegate_ = delegate; |
430 prompt_type_ = RE_ENABLE_PROMPT; | 442 prompt_type_ = RE_ENABLE_PROMPT; |
431 | 443 |
432 LoadImageIfNeeded(); | 444 LoadImageIfNeeded(); |
433 } | 445 } |
434 | 446 |
| 447 void ExtensionInstallPrompt::ConfirmExternalInstall( |
| 448 Delegate* delegate, const Extension* extension) { |
| 449 DCHECK(ui_loop_ == MessageLoop::current()); |
| 450 extension_ = extension; |
| 451 permissions_ = extension->GetActivePermissions(); |
| 452 delegate_ = delegate; |
| 453 prompt_type_ = EXTERNAL_INSTALL_PROMPT; |
| 454 |
| 455 LoadImageIfNeeded(); |
| 456 } |
| 457 |
435 void ExtensionInstallPrompt::ConfirmPermissions( | 458 void ExtensionInstallPrompt::ConfirmPermissions( |
436 Delegate* delegate, | 459 Delegate* delegate, |
437 const Extension* extension, | 460 const Extension* extension, |
438 const PermissionSet* permissions) { | 461 const PermissionSet* permissions) { |
439 DCHECK(ui_loop_ == MessageLoop::current()); | 462 DCHECK(ui_loop_ == MessageLoop::current()); |
440 extension_ = extension; | 463 extension_ = extension; |
441 permissions_ = permissions; | 464 permissions_ = permissions; |
442 delegate_ = delegate; | 465 delegate_ = delegate; |
443 prompt_type_ = PERMISSIONS_PROMPT; | 466 prompt_type_ = PERMISSIONS_PROMPT; |
444 | 467 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 tracker_.LoadImage(extension_, image, | 535 tracker_.LoadImage(extension_, image, |
513 gfx::Size(pixel_size, pixel_size), | 536 gfx::Size(pixel_size, pixel_size), |
514 ImageLoadingTracker::DONT_CACHE); | 537 ImageLoadingTracker::DONT_CACHE); |
515 } | 538 } |
516 | 539 |
517 void ExtensionInstallPrompt::FetchOAuthIssueAdviceIfNeeded() { | 540 void ExtensionInstallPrompt::FetchOAuthIssueAdviceIfNeeded() { |
518 // |extension_| may be NULL, e.g. in the bundle install case. | 541 // |extension_| may be NULL, e.g. in the bundle install case. |
519 if (!extension_ || | 542 if (!extension_ || |
520 prompt_type_ == BUNDLE_INSTALL_PROMPT || | 543 prompt_type_ == BUNDLE_INSTALL_PROMPT || |
521 prompt_type_ == INLINE_INSTALL_PROMPT || | 544 prompt_type_ == INLINE_INSTALL_PROMPT || |
| 545 prompt_type_ == EXTERNAL_INSTALL_PROMPT || |
522 prompt_.GetOAuthIssueCount() != 0U) { | 546 prompt_.GetOAuthIssueCount() != 0U) { |
523 ShowConfirmation(); | 547 ShowConfirmation(); |
524 return; | 548 return; |
525 } | 549 } |
526 | 550 |
527 const Extension::OAuth2Info& oauth2_info = extension_->oauth2_info(); | 551 const Extension::OAuth2Info& oauth2_info = extension_->oauth2_info(); |
528 if (oauth2_info.client_id.empty() || | 552 if (oauth2_info.client_id.empty() || |
529 oauth2_info.scopes.empty()) { | 553 oauth2_info.scopes.empty()) { |
530 ShowConfirmation(); | 554 ShowConfirmation(); |
531 return; | 555 return; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
564 if (permissions_) { | 588 if (permissions_) { |
565 Extension::Type extension_type = extension_ ? extension_->GetType() : | 589 Extension::Type extension_type = extension_ ? extension_->GetType() : |
566 Extension::TYPE_UNKNOWN; | 590 Extension::TYPE_UNKNOWN; |
567 prompt_.SetPermissions(permissions_->GetWarningMessages(extension_type)); | 591 prompt_.SetPermissions(permissions_->GetWarningMessages(extension_type)); |
568 } | 592 } |
569 | 593 |
570 switch (prompt_type_) { | 594 switch (prompt_type_) { |
571 case PERMISSIONS_PROMPT: | 595 case PERMISSIONS_PROMPT: |
572 case RE_ENABLE_PROMPT: | 596 case RE_ENABLE_PROMPT: |
573 case INLINE_INSTALL_PROMPT: | 597 case INLINE_INSTALL_PROMPT: |
| 598 case EXTERNAL_INSTALL_PROMPT: |
574 case INSTALL_PROMPT: { | 599 case INSTALL_PROMPT: { |
575 prompt_.set_extension(extension_); | 600 prompt_.set_extension(extension_); |
576 prompt_.set_icon(gfx::Image(icon_)); | 601 prompt_.set_icon(gfx::Image(icon_)); |
577 break; | 602 break; |
578 } | 603 } |
579 case BUNDLE_INSTALL_PROMPT: { | 604 case BUNDLE_INSTALL_PROMPT: { |
580 prompt_.set_bundle(bundle_); | 605 prompt_.set_bundle(bundle_); |
581 break; | 606 break; |
582 } | 607 } |
583 default: | 608 default: |
(...skipping 16 matching lines...) Expand all Loading... |
600 Browser* browser) { | 625 Browser* browser) { |
601 // |browser| can be NULL in unit tests. | 626 // |browser| can be NULL in unit tests. |
602 if (!browser) | 627 if (!browser) |
603 return new ExtensionInstallPrompt(NULL, NULL, NULL); | 628 return new ExtensionInstallPrompt(NULL, NULL, NULL); |
604 gfx::NativeWindow parent = | 629 gfx::NativeWindow parent = |
605 browser->window() ? browser->window()->GetNativeWindow() : NULL; | 630 browser->window() ? browser->window()->GetNativeWindow() : NULL; |
606 return new ExtensionInstallPrompt(parent, browser, browser->profile()); | 631 return new ExtensionInstallPrompt(parent, browser, browser->profile()); |
607 } | 632 } |
608 | 633 |
609 } // namespace chrome | 634 } // namespace chrome |
OLD | NEW |