| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/auto_login_prompter.h" | 5 #include "chrome/browser/ui/auto_login_prompter.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 #include "content/public/browser/notification_types.h" | 34 #include "content/public/browser/notification_types.h" |
| 35 #include "googleurl/src/url_canon.h" | 35 #include "googleurl/src/url_canon.h" |
| 36 #include "googleurl/src/url_util.h" | 36 #include "googleurl/src/url_util.h" |
| 37 #include "grit/generated_resources.h" | 37 #include "grit/generated_resources.h" |
| 38 #include "grit/theme_resources_standard.h" | 38 #include "grit/theme_resources_standard.h" |
| 39 #include "net/url_request/url_request.h" | 39 #include "net/url_request/url_request.h" |
| 40 #include "ui/base/l10n/l10n_util.h" | 40 #include "ui/base/l10n/l10n_util.h" |
| 41 #include "ui/base/resource/resource_bundle.h" | 41 #include "ui/base/resource/resource_bundle.h" |
| 42 | 42 |
| 43 using content::BrowserThread; | 43 using content::BrowserThread; |
| 44 using content::NavigationController; |
| 44 using content::WebContents; | 45 using content::WebContents; |
| 45 | 46 |
| 46 // AutoLoginRedirector -------------------------------------------------------- | 47 // AutoLoginRedirector -------------------------------------------------------- |
| 47 | 48 |
| 48 // This class is created by the AutoLoginInfoBarDelegate when the user wishes to | 49 // This class is created by the AutoLoginInfoBarDelegate when the user wishes to |
| 49 // auto-login. It holds context information needed while re-issuing service | 50 // auto-login. It holds context information needed while re-issuing service |
| 50 // tokens using the TokenService, gets the browser cookies with the TokenAuth | 51 // tokens using the TokenService, gets the browser cookies with the TokenAuth |
| 51 // API, and finally redirects the user to the correct page. | 52 // API, and finally redirects the user to the correct page. |
| 52 class AutoLoginRedirector : public content::NotificationObserver { | 53 class AutoLoginRedirector : public content::NotificationObserver { |
| 53 public: | 54 public: |
| 54 AutoLoginRedirector(TokenService* token_service, | 55 AutoLoginRedirector(TokenService* token_service, |
| 55 content::NavigationController* navigation_controller, | 56 NavigationController* navigation_controller, |
| 56 const std::string& args); | 57 const std::string& args); |
| 57 virtual ~AutoLoginRedirector(); | 58 virtual ~AutoLoginRedirector(); |
| 58 | 59 |
| 59 private: | 60 private: |
| 60 // content::NotificationObserver override. | 61 // content::NotificationObserver override. |
| 61 virtual void Observe(int type, | 62 virtual void Observe(int type, |
| 62 const content::NotificationSource& source, | 63 const content::NotificationSource& source, |
| 63 const content::NotificationDetails& details) OVERRIDE; | 64 const content::NotificationDetails& details) OVERRIDE; |
| 64 | 65 |
| 65 // Redirect tab to MergeSession URL, logging the user in and navigating | 66 // Redirect tab to MergeSession URL, logging the user in and navigating |
| 66 // to the desired page. | 67 // to the desired page. |
| 67 void RedirectToMergeSession(const std::string& token); | 68 void RedirectToMergeSession(const std::string& token); |
| 68 | 69 |
| 69 content::NavigationController* navigation_controller_; | 70 NavigationController* navigation_controller_; |
| 70 const std::string args_; | 71 const std::string args_; |
| 71 content::NotificationRegistrar registrar_; | 72 content::NotificationRegistrar registrar_; |
| 72 | 73 |
| 73 DISALLOW_COPY_AND_ASSIGN(AutoLoginRedirector); | 74 DISALLOW_COPY_AND_ASSIGN(AutoLoginRedirector); |
| 74 }; | 75 }; |
| 75 | 76 |
| 76 AutoLoginRedirector::AutoLoginRedirector( | 77 AutoLoginRedirector::AutoLoginRedirector( |
| 77 TokenService* token_service, | 78 TokenService* token_service, |
| 78 content::NavigationController* navigation_controller, | 79 NavigationController* navigation_controller, |
| 79 const std::string& args) | 80 const std::string& args) |
| 80 : navigation_controller_(navigation_controller), | 81 : navigation_controller_(navigation_controller), |
| 81 args_(args) { | 82 args_(args) { |
| 82 // Register to receive notification for new tokens and then force the tokens | 83 // Register to receive notification for new tokens and then force the tokens |
| 83 // to be re-issued. The token service guarantees to fire either | 84 // to be re-issued. The token service guarantees to fire either |
| 84 // TOKEN_AVAILABLE or TOKEN_REQUEST_FAILED, so we will get at least one or | 85 // TOKEN_AVAILABLE or TOKEN_REQUEST_FAILED, so we will get at least one or |
| 85 // the other, allow AutoLoginRedirector to delete itself correctly. | 86 // the other, allow AutoLoginRedirector to delete itself correctly. |
| 86 registrar_.Add(this, | 87 registrar_.Add(this, |
| 87 chrome::NOTIFICATION_TOKEN_AVAILABLE, | 88 chrome::NOTIFICATION_TOKEN_AVAILABLE, |
| 88 content::Source<TokenService>(token_service)); | 89 content::Source<TokenService>(token_service)); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 std::string()); | 135 std::string()); |
| 135 } | 136 } |
| 136 | 137 |
| 137 | 138 |
| 138 // AutoLoginInfoBarDelegate --------------------------------------------------- | 139 // AutoLoginInfoBarDelegate --------------------------------------------------- |
| 139 | 140 |
| 140 // This is the actual infobar displayed to prompt the user to auto-login. | 141 // This is the actual infobar displayed to prompt the user to auto-login. |
| 141 class AutoLoginInfoBarDelegate : public ConfirmInfoBarDelegate { | 142 class AutoLoginInfoBarDelegate : public ConfirmInfoBarDelegate { |
| 142 public: | 143 public: |
| 143 AutoLoginInfoBarDelegate(InfoBarTabHelper* owner, | 144 AutoLoginInfoBarDelegate(InfoBarTabHelper* owner, |
| 144 content::NavigationController* navigation_controller, | 145 NavigationController* navigation_controller, |
| 145 TokenService* token_service, | 146 TokenService* token_service, |
| 146 PrefService* pref_service, | 147 PrefService* pref_service, |
| 147 const std::string& username, | 148 const std::string& username, |
| 148 const std::string& args); | 149 const std::string& args); |
| 149 virtual ~AutoLoginInfoBarDelegate(); | 150 virtual ~AutoLoginInfoBarDelegate(); |
| 150 | 151 |
| 151 private: | 152 private: |
| 152 // ConfirmInfoBarDelegate overrides. | 153 // ConfirmInfoBarDelegate overrides. |
| 153 virtual gfx::Image* GetIcon() const OVERRIDE; | 154 virtual gfx::Image* GetIcon() const OVERRIDE; |
| 154 virtual Type GetInfoBarType() const OVERRIDE; | 155 virtual Type GetInfoBarType() const OVERRIDE; |
| 155 virtual string16 GetMessageText() const OVERRIDE; | 156 virtual string16 GetMessageText() const OVERRIDE; |
| 156 virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; | 157 virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; |
| 157 virtual bool Accept() OVERRIDE; | 158 virtual bool Accept() OVERRIDE; |
| 158 virtual bool Cancel() OVERRIDE; | 159 virtual bool Cancel() OVERRIDE; |
| 159 | 160 |
| 160 content::NavigationController* navigation_controller_; | 161 NavigationController* navigation_controller_; |
| 161 TokenService* token_service_; | 162 TokenService* token_service_; |
| 162 PrefService* pref_service_; | 163 PrefService* pref_service_; |
| 163 std::string username_; | 164 std::string username_; |
| 164 std::string args_; | 165 std::string args_; |
| 165 | 166 |
| 166 DISALLOW_COPY_AND_ASSIGN(AutoLoginInfoBarDelegate); | 167 DISALLOW_COPY_AND_ASSIGN(AutoLoginInfoBarDelegate); |
| 167 }; | 168 }; |
| 168 | 169 |
| 169 AutoLoginInfoBarDelegate::AutoLoginInfoBarDelegate( | 170 AutoLoginInfoBarDelegate::AutoLoginInfoBarDelegate( |
| 170 InfoBarTabHelper* owner, | 171 InfoBarTabHelper* owner, |
| 171 content::NavigationController* navigation_controller, | 172 NavigationController* navigation_controller, |
| 172 TokenService* token_service, | 173 TokenService* token_service, |
| 173 PrefService* pref_service, | 174 PrefService* pref_service, |
| 174 const std::string& username, | 175 const std::string& username, |
| 175 const std::string& args) | 176 const std::string& args) |
| 176 : ConfirmInfoBarDelegate(owner), | 177 : ConfirmInfoBarDelegate(owner), |
| 177 navigation_controller_(navigation_controller), | 178 navigation_controller_(navigation_controller), |
| 178 token_service_(token_service), | 179 token_service_(token_service), |
| 179 pref_service_(pref_service), | 180 pref_service_(pref_service), |
| 180 username_(username), | 181 username_(username), |
| 181 args_(args) { | 182 args_(args) { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 // AutoLoginPrompter ---------------------------------------------------------- | 220 // AutoLoginPrompter ---------------------------------------------------------- |
| 220 | 221 |
| 221 AutoLoginPrompter::AutoLoginPrompter( | 222 AutoLoginPrompter::AutoLoginPrompter( |
| 222 WebContents* web_contents, | 223 WebContents* web_contents, |
| 223 const std::string& username, | 224 const std::string& username, |
| 224 const std::string& args) | 225 const std::string& args) |
| 225 : web_contents_(web_contents), | 226 : web_contents_(web_contents), |
| 226 username_(username), | 227 username_(username), |
| 227 args_(args) { | 228 args_(args) { |
| 228 registrar_.Add(this, content::NOTIFICATION_LOAD_STOP, | 229 registrar_.Add(this, content::NOTIFICATION_LOAD_STOP, |
| 229 content::Source<content::NavigationController>( | 230 content::Source<NavigationController>( |
| 230 &web_contents_->GetController())); | 231 &web_contents_->GetController())); |
| 231 registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | 232 registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
| 232 content::Source<WebContents>(web_contents_)); | 233 content::Source<WebContents>(web_contents_)); |
| 233 } | 234 } |
| 234 | 235 |
| 235 AutoLoginPrompter::~AutoLoginPrompter() { | 236 AutoLoginPrompter::~AutoLoginPrompter() { |
| 236 } | 237 } |
| 237 | 238 |
| 238 // static | 239 // static |
| 239 void AutoLoginPrompter::ShowInfoBarIfPossible(net::URLRequest* request, | 240 void AutoLoginPrompter::ShowInfoBarIfPossible(net::URLRequest* request, |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 infobar_helper, &web_contents_->GetController(), | 337 infobar_helper, &web_contents_->GetController(), |
| 337 profile->GetTokenService(), profile->GetPrefs(), | 338 profile->GetTokenService(), profile->GetPrefs(), |
| 338 username_, args_)); | 339 username_, args_)); |
| 339 } | 340 } |
| 340 } | 341 } |
| 341 // Either we couldn't add the infobar, we added the infobar, or the tab | 342 // Either we couldn't add the infobar, we added the infobar, or the tab |
| 342 // contents was destroyed before the navigation completed. In any case | 343 // contents was destroyed before the navigation completed. In any case |
| 343 // there's no reason to live further. | 344 // there's no reason to live further. |
| 344 delete this; | 345 delete this; |
| 345 } | 346 } |
| OLD | NEW |