Index: chrome/browser/extensions/api/webstore_private/webstore_private_api.cc |
diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc |
index 15a5f04c4c782077609fb5293d378bae7d7dd638..ed1337f7d553e4c8de2a582ceca451998e93424e 100644 |
--- a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc |
+++ b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc |
@@ -30,6 +30,8 @@ |
#include "chrome/browser/ui/app_list/app_list_service.h" |
#include "chrome/browser/ui/app_list/app_list_util.h" |
#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/webui/signin/login_ui_service.h" |
+#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" |
#include "chrome/common/extensions/extension_constants.h" |
#include "chrome/common/extensions/extension_l10n_util.h" |
#include "chrome/common/pref_names.h" |
@@ -58,6 +60,7 @@ namespace GetStoreLogin = api::webstore_private::GetStoreLogin; |
namespace GetWebGLStatus = api::webstore_private::GetWebGLStatus; |
namespace InstallBundle = api::webstore_private::InstallBundle; |
namespace IsInIncognitoMode = api::webstore_private::IsInIncognitoMode; |
+namespace SignIn = api::webstore_private::SignIn; |
namespace SetStoreLogin = api::webstore_private::SetStoreLogin; |
namespace { |
@@ -686,4 +689,37 @@ bool WebstorePrivateIsInIncognitoModeFunction::RunImpl() { |
return true; |
} |
+bool WebstorePrivateSignInFunction::RunImpl() { |
Ilya Sherman
2014/03/12 06:34:29
Hui, this CL is not nearly ready for a full review
guohui
2014/03/12 18:17:39
it looks good in general, plz see my comments belo
|
+ scoped_ptr<SignIn::Params> params = SignIn::Params::Create(*args_); |
+ EXTENSION_FUNCTION_VALIDATE(params); |
+ |
+ // The |continue_url| is required. |
+ if (!params->continue_url) |
+ return false; |
+ |
+ // If sign-in is disallowed, give up. |
+ SigninManagerBase* signin_manager = |
+ SigninManagerFactory::GetForProfile(GetProfile()); |
+ if (!signin_manager || !signin_manager->IsSigninAllowed()) |
+ return false; |
Ilya Sherman
2014/03/12 06:34:29
Am I right to be using a SigninManager here?
guohui
2014/03/12 18:17:39
yes, i think so, though i think you need to notify
|
+ |
+ // If the user is already signed in, there's nothing else to do. |
+ if (!signin_manager->GetAuthenticatedUsername().empty()) |
+ return true; |
Ilya Sherman
2014/03/12 06:34:29
Is it appropriate to bail if the user is already s
guohui
2014/03/12 18:17:39
yup, again we should notify the webstore of the re
|
+ |
+ // TODO(isherman): What to do if an authentication is already in progress? |
+ // if (signin_manager->AuthInProgress()) ... |
Ilya Sherman
2014/03/12 06:34:29
What's the expected behavior if there is already a
guohui
2014/03/12 18:17:39
this means signin is already triggered through a s
|
+ |
+ // TODO(isherman): Replace the current tab with the UI, rather than showing it |
+ // in a new tab. |
Ilya Sherman
2014/03/12 06:34:29
Are you aware of existing code that I can re-use t
guohui
2014/03/12 18:17:39
hmm i think you could simply navigate the current
|
+ // TODO(isherman): Make use of the |continue_url|. |
+ LoginUIService* login_ui_service = |
+ LoginUIServiceFactory::GetForProfile(GetProfile()); |
+ login_ui_service->ShowLoginPopup(); |
Ilya Sherman
2014/03/12 06:34:29
Is a LoginUIService the best way to show an inline
guohui
2014/03/12 18:17:39
LoginUIService::ShowLoginPopup shows the login UI
|
+ |
+ // TODO(isherman): Just for debugging: |
+ DLOG(WARNING) << *params->continue_url; |
+ return true; |
+} |
+ |
} // namespace extensions |