Chromium Code Reviews| Index: chrome/browser/extensions/extension_install_prompt.cc |
| diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc |
| index e7380735c8ab8de3704296914546dbe211566042..f478eefedb1a26bb71ec46d9ae7f802a1be23ec8 100644 |
| --- a/chrome/browser/extensions/extension_install_prompt.cc |
| +++ b/chrome/browser/extensions/extension_install_prompt.cc |
| @@ -17,6 +17,8 @@ |
| #include "chrome/browser/extensions/extension_install_dialog.h" |
| #include "chrome/browser/extensions/extension_install_ui.h" |
| #include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/signin/token_service.h" |
| +#include "chrome/browser/signin/token_service_factory.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_navigator.h" |
| #include "chrome/browser/ui/tab_contents/tab_contents.h" |
| @@ -101,6 +103,11 @@ void ExtensionInstallPrompt::Prompt::SetPermissions( |
| permissions_ = permissions; |
| } |
| +void ExtensionInstallPrompt::Prompt::SetOAuthIssues( |
| + const IssueAdviceInfo& issues) { |
| + oauth_issues_ = issues; |
| +} |
| + |
| void ExtensionInstallPrompt::Prompt::SetInlineInstallWebstoreData( |
| const std::string& localized_user_count, |
| double average_rating, |
| @@ -208,6 +215,16 @@ string16 ExtensionInstallPrompt::Prompt::GetPermission(size_t index) const { |
| IDS_EXTENSION_PERMISSION_LINE, permissions_[index]); |
| } |
| +size_t ExtensionInstallPrompt::Prompt::GetOAuthIssueCount() const { |
| + return oauth_issues_.size(); |
| +} |
| + |
| +const IssueAdviceInfoEntry& ExtensionInstallPrompt::Prompt::GetOAuthIssue( |
| + size_t index) const { |
| + CHECK_LT(index, oauth_issues_.size()); |
| + return oauth_issues_[index]; |
| +} |
| + |
| // static |
| scoped_refptr<Extension> |
| ExtensionInstallPrompt::GetLocalizedExtensionForDisplay( |
| @@ -246,6 +263,7 @@ ExtensionInstallPrompt::ExtensionInstallPrompt(Browser* browser) |
| delegate_(NULL), |
| prompt_(UNSET_PROMPT_TYPE), |
| prompt_type_(UNSET_PROMPT_TYPE), |
| + record_oauth2_grant_(false), |
| ALLOW_THIS_IN_INITIALIZER_LIST(tracker_(this)) { |
| } |
| @@ -261,7 +279,7 @@ void ExtensionInstallPrompt::ConfirmBundleInstall( |
| delegate_ = bundle; |
| prompt_type_ = BUNDLE_INSTALL_PROMPT; |
| - ShowConfirmation(); |
| + FetchOAuthIssuesIfNeeded(); |
| } |
| void ExtensionInstallPrompt::ConfirmInlineInstall( |
| @@ -277,7 +295,7 @@ void ExtensionInstallPrompt::ConfirmInlineInstall( |
| prompt_type_ = INLINE_INSTALL_PROMPT; |
| SetIcon(icon); |
| - ShowConfirmation(); |
| + FetchOAuthIssuesIfNeeded(); |
| } |
| void ExtensionInstallPrompt::ConfirmWebstoreInstall(Delegate* delegate, |
| @@ -365,13 +383,13 @@ void ExtensionInstallPrompt::OnImageLoaded(const gfx::Image& image, |
| const std::string& extension_id, |
| int index) { |
| SetIcon(image.IsEmpty() ? NULL : image.ToSkBitmap()); |
| - ShowConfirmation(); |
| + FetchOAuthIssuesIfNeeded(); |
| } |
| void ExtensionInstallPrompt::LoadImageIfNeeded() { |
| // Bundle install prompts do not have an icon. |
| if (!icon_.empty()) { |
| - ShowConfirmation(); |
| + FetchOAuthIssuesIfNeeded(); |
| return; |
| } |
| @@ -384,6 +402,51 @@ void ExtensionInstallPrompt::LoadImageIfNeeded() { |
| ImageLoadingTracker::DONT_CACHE); |
| } |
| +void ExtensionInstallPrompt::FetchOAuthIssuesIfNeeded() { |
| +#if !defined(TOOLKIT_GTK) |
| + // TODO(estade): Displaying the OAuth issues is not yet implemented except |
| + // on desktop linux. |
| + ShowConfirmation(); |
| + return; |
| +#else |
| + const Extension::OAuth2Info& oauth2_info = extension_->oauth2_info(); |
| + if (oauth2_info.client_id.empty() || |
| + permissions_->scopes().empty() || |
| + prompt_type_ == BUNDLE_INSTALL_PROMPT) { |
|
jstritar
2012/06/25 15:10:35
We should probably use the fallback behavior for t
Evan Stade
2012/06/25 20:31:42
Done.
|
| + ShowConfirmation(); |
| + return; |
| + } |
| + |
| + Profile* profile = install_ui_->browser()->profile(); |
| + TokenService* token_service = TokenServiceFactory::GetForProfile(profile); |
| + std::vector<std::string> scopes; |
| + scopes.assign(permissions_->scopes().begin(), permissions_->scopes().end()); |
| + |
| + token_flow_ = new OAuth2MintTokenFlow( |
| + profile->GetRequestContext(), |
| + this, |
| + OAuth2MintTokenFlow::Parameters( |
| + token_service->GetOAuth2LoginRefreshToken(), |
| + extension_->id(), |
| + oauth2_info.client_id, |
| + scopes, |
| + OAuth2MintTokenFlow::MODE_ISSUE_ADVICE)); |
| + token_flow_->Start(); |
| +#endif |
| +} |
| + |
| +void ExtensionInstallPrompt::OnIssueAdviceSuccess( |
| + const IssueAdviceInfo& advice_info) { |
| + prompt_.SetOAuthIssues(advice_info); |
| + record_oauth2_grant_ = true; |
| + ShowConfirmation(); |
| +} |
| + |
| +void ExtensionInstallPrompt::OnMintTokenFailure( |
| + const GoogleServiceAuthError& error) { |
| + ShowConfirmation(); |
| +} |
| + |
| void ExtensionInstallPrompt::ShowConfirmation() { |
| prompt_.set_type(prompt_type_); |
| prompt_.SetPermissions(permissions_->GetWarningMessages()); |