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

Unified Diff: chrome/browser/extensions/extension_install_prompt.cc

Issue 10630021: Modify experimental identity flow to display scope descriptions and details. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 6 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 side-by-side diff with in-line comments
Download patch
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..8991a55f559ed3818aabdef68595fe93b53a6e70 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,9 +402,54 @@ 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) {
+ 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());
+ prompt_.set_type(prompt_type_);
switch (prompt_type_) {
case PERMISSIONS_PROMPT:

Powered by Google App Engine
This is Rietveld 408576698