Index: chrome/browser/extensions/api/identity/identity_api.cc |
=================================================================== |
--- chrome/browser/extensions/api/identity/identity_api.cc (revision 137883) |
+++ chrome/browser/extensions/api/identity/identity_api.cc (working copy) |
@@ -19,6 +19,8 @@ |
const char kInvalidClientId[] = "Invalid OAuth2 Client ID."; |
const char kInvalidScopes[] = "Invalid OAuth2 scopes."; |
+const char kUrlFieldRequired[] = "Missing required field: url"; |
+const char kInvalidRedirect[] = "Did not redirect to the right URL."; |
} // namespace |
@@ -70,4 +72,39 @@ |
Release(); // Balanced in RunImpl. |
} |
+LaunchWebAuthFlowFunction::LaunchWebAuthFlowFunction() {} |
+LaunchWebAuthFlowFunction::~LaunchWebAuthFlowFunction() {} |
+ |
+bool LaunchWebAuthFlowFunction::RunImpl() { |
+ DictionaryValue* arg1 = NULL; |
+ std::string url; |
+ |
+ if (!args_.get() || |
+ !args_->GetDictionary(0, &arg1) || |
+ !arg1->GetString("url", &url)) { |
+ error_ = kUrlFieldRequired; |
+ return false; |
+ } |
+ |
+ AddRef(); // Balanced in OnAuthFlowSuccess/Failure. |
+ GURL auth_url(url); |
+ auth_flow_.reset(new WebAuthFlow( |
+ this, profile(), GetExtension()->id(), auth_url)); |
+ auth_flow_->Start(); |
+ return true; |
+} |
+ |
+void LaunchWebAuthFlowFunction::OnAuthFlowSuccess( |
+ const std::string& redirect_url) { |
+ result_.reset(Value::CreateStringValue(redirect_url)); |
+ SendResponse(true); |
+ Release(); // Balanced in RunImpl. |
+} |
+ |
+void LaunchWebAuthFlowFunction::OnAuthFlowFailure() { |
+ error_ = kInvalidRedirect; |
+ SendResponse(false); |
+ Release(); // Balanced in RunImpl. |
+} |
+ |
} // namespace extensions |