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

Unified Diff: chrome/browser/signin/easy_unlock_toggle_flow.cc

Issue 475483003: Wire easy unlock settings UI (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/signin/easy_unlock_toggle_flow.cc
diff --git a/chrome/browser/signin/easy_unlock_toggle_flow.cc b/chrome/browser/signin/easy_unlock_toggle_flow.cc
new file mode 100644
index 0000000000000000000000000000000000000000..7655b2b8e16418c52262e7631fd088138eb92a7e
--- /dev/null
+++ b/chrome/browser/signin/easy_unlock_toggle_flow.cc
@@ -0,0 +1,213 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/signin/easy_unlock_toggle_flow.h"
+
+#include <vector>
+
+#include "base/logging.h"
+#include "base/strings/stringprintf.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
+#include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/common/extensions/api/identity/oauth2_manifest_handler.h"
+#include "chrome/common/extensions/extension_constants.h"
+#include "components/signin/core/browser/profile_oauth2_token_service.h"
+#include "components/signin/core/browser/signin_manager.h"
+#include "extensions/browser/extension_system.h"
+#include "google_apis/gaia/oauth2_api_call_flow.h"
+#include "net/url_request/url_fetcher.h"
+
+namespace {
+
+const char kEasyUnlockToggleUrl[] =
+ "https://www.googleapis.com/cryptauth/v1/deviceSync/toggleeasyunlock";
+
+std::vector<std::string> GetScopes() {
+ std::vector<std::string> scopes;
+ scopes.push_back("https://www.googleapis.com/auth/proximity_auth");
+ scopes.push_back("https://www.googleapis.com/auth/cryptauth");
+ return scopes;
+}
+
+std::string GetEasyUnlockAppClientId(Profile * profile) {
+ extensions::ExtensionSystem* extension_system =
+ extensions::ExtensionSystem::Get(profile);
+ ExtensionService* extension_service = extension_system->extension_service();
+ const extensions::Extension* easy_unlock_app =
+ extension_service->GetInstalledExtension(
+ extension_misc::kEasyUnlockAppId);
+ if (!easy_unlock_app)
+ return std::string();
+
+ const extensions::OAuth2Info& oauth2_info =
+ extensions::OAuth2Info::GetOAuth2Info(easy_unlock_app);
+ return oauth2_info.client_id;
+}
+
+} // namespace
+
+class EasyUnlockToggleFlow::ToggleApiCall : public OAuth2ApiCallFlow {
+ public:
+ ToggleApiCall(EasyUnlockToggleFlow* flow,
+ net::URLRequestContextGetter* context,
+ const std::string& access_token,
+ const std::string& phone_public_key,
+ bool toggle_enable);
+ virtual ~ToggleApiCall();
+
+ // OAuth2ApiCallFlow
+ virtual GURL CreateApiCallUrl() OVERRIDE;
+ virtual std::string CreateApiCallBody() OVERRIDE;
+ virtual std::string CreateApiCallBodyContentType() OVERRIDE;
+ virtual void ProcessApiCallSuccess(const net::URLFetcher* source) OVERRIDE;
+ virtual void ProcessApiCallFailure(const net::URLFetcher* source) OVERRIDE;
+ virtual void ProcessNewAccessToken(const std::string& access_token) OVERRIDE;
+ virtual void ProcessMintAccessTokenFailure(
+ const GoogleServiceAuthError& error) OVERRIDE;
+
+ private:
+ EasyUnlockToggleFlow* flow_;
+ const std::string phone_public_key_;
+ const bool toggle_enable_;
+
+ DISALLOW_COPY_AND_ASSIGN(ToggleApiCall);
+};
+
+EasyUnlockToggleFlow::ToggleApiCall::ToggleApiCall(
+ EasyUnlockToggleFlow* flow,
+ net::URLRequestContextGetter* context,
+ const std::string& access_token,
+ const std::string& phone_public_key,
+ bool toggle_enable)
+ : OAuth2ApiCallFlow(context,
+ std::string(),
+ access_token,
+ GetScopes()),
+ flow_(flow),
+ phone_public_key_(phone_public_key),
+ toggle_enable_(toggle_enable) {
+}
+
+EasyUnlockToggleFlow::ToggleApiCall::~ToggleApiCall() {
+}
+
+GURL EasyUnlockToggleFlow::ToggleApiCall::CreateApiCallUrl() {
+ return GURL(kEasyUnlockToggleUrl);
+}
+
+std::string EasyUnlockToggleFlow::ToggleApiCall::CreateApiCallBody() {
+ const char kBodyFormat[] = "{\"enable\":%s,\"publicKey\":\"%s\"}";
+ return base::StringPrintf(
+ kBodyFormat,
+ toggle_enable_ ? "true" : "false",
+ phone_public_key_.c_str());
+}
+
+std::string
+EasyUnlockToggleFlow::ToggleApiCall::CreateApiCallBodyContentType() {
+ return "application/json";
+}
+
+void EasyUnlockToggleFlow::ToggleApiCall::ProcessApiCallSuccess(
+ const net::URLFetcher* source) {
+ flow_->ReportToggleApiCallResult(true);
+}
+
+void EasyUnlockToggleFlow::ToggleApiCall::ProcessApiCallFailure(
+ const net::URLFetcher* source) {
+ flow_->ReportToggleApiCallResult(false);
+}
+
+void EasyUnlockToggleFlow::ToggleApiCall::ProcessNewAccessToken(
+ const std::string& access_token) {
+ NOTREACHED();
+}
+
+void EasyUnlockToggleFlow::ToggleApiCall::ProcessMintAccessTokenFailure(
+ const GoogleServiceAuthError& error) {
+ NOTREACHED();
+}
+
+EasyUnlockToggleFlow::EasyUnlockToggleFlow(Profile* profile,
+ const std::string& phone_public_key,
+ bool toggle_enable,
+ const ToggleFlowCallback& callback)
+ : OAuth2TokenService::Consumer("easy_unlock_toggle"),
+ profile_(profile),
+ phone_public_key_(phone_public_key),
+ toggle_enable_(toggle_enable),
+ callback_(callback) {
+}
+
+EasyUnlockToggleFlow::~EasyUnlockToggleFlow() {
+}
+
+void EasyUnlockToggleFlow::Start() {
+ ProfileOAuth2TokenService* token_service =
+ ProfileOAuth2TokenServiceFactory::GetForProfile(profile_);
+ SigninManagerBase* signin_manager =
+ SigninManagerFactory::GetForProfile(profile_);
+ token_request_ =
+ token_service->StartRequest(signin_manager->GetAuthenticatedAccountId(),
+ OAuth2TokenService::ScopeSet(),
+ this);
+}
+
+void EasyUnlockToggleFlow::OnGetTokenSuccess(
+ const OAuth2TokenService::Request* request,
+ const std::string& access_token,
+ const base::Time& expiration_time) {
+ DCHECK_EQ(token_request_.get(), request);
+ token_request_.reset();
+
+ mint_token_flow_.reset(
+ new OAuth2MintTokenFlow(profile_->GetRequestContext(),
+ this,
+ OAuth2MintTokenFlow::Parameters(
+ access_token,
+ extension_misc::kEasyUnlockAppId,
+ GetEasyUnlockAppClientId(profile_),
+ GetScopes(),
+ OAuth2MintTokenFlow::MODE_MINT_TOKEN_FORCE)));
+ mint_token_flow_->Start();
+}
+
+void EasyUnlockToggleFlow::OnGetTokenFailure(
+ const OAuth2TokenService::Request* request,
+ const GoogleServiceAuthError& error) {
+ DCHECK_EQ(token_request_.get(), request);
+ token_request_.reset();
+
+ LOG(ERROR) << "Easy unlock toggle flow, failed to get access token,"
+ << "error=" << error.state();
+ callback_.Run(false);
+}
+
+void EasyUnlockToggleFlow::OnMintTokenSuccess(const std::string& access_token,
+ int time_to_live) {
+ toggle_api_call_.reset(new ToggleApiCall(this,
+ profile_->GetRequestContext(),
+ access_token,
+ phone_public_key_,
+ toggle_enable_));
+ toggle_api_call_->Start();
+}
+
+void EasyUnlockToggleFlow::OnMintTokenFailure(
+ const GoogleServiceAuthError& error) {
+ LOG(ERROR) << "Easy unlock toggle flow, failed to mint access token,"
+ << "error=" << error.state();
+ callback_.Run(false);
+}
+
+void EasyUnlockToggleFlow::OnIssueAdviceSuccess(
+ const IssueAdviceInfo& issue_advice) {
+ NOTREACHED();
+}
+
+void EasyUnlockToggleFlow::ReportToggleApiCallResult(bool success) {
+ callback_.Run(success);
+}
« no previous file with comments | « chrome/browser/signin/easy_unlock_toggle_flow.h ('k') | chrome/browser/ui/webui/options/browser_options_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698