OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/login/login_prompt.h" | 5 #include "chrome/browser/ui/login/login_prompt.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/strings/string16.h" | 9 #include "base/strings/string16.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
11 #include "chrome/browser/ui/android/chrome_http_auth_handler.h" | 11 #include "chrome/browser/ui/android/chrome_http_auth_handler.h" |
12 #include "chrome/browser/ui/android/window_android_helper.h" | 12 #include "chrome/browser/ui/android/window_android_helper.h" |
13 #include "chrome/browser/ui/login/login_prompt.h" | |
14 #include "content/public/browser/browser_thread.h" | 13 #include "content/public/browser/browser_thread.h" |
15 #include "content/public/browser/web_contents.h" | 14 #include "content/public/browser/web_contents.h" |
16 #include "net/base/auth.h" | 15 #include "net/base/auth.h" |
17 #include "ui/android/window_android.h" | 16 #include "ui/android/window_android.h" |
18 | 17 |
19 using content::BrowserThread; | 18 using content::BrowserThread; |
20 using net::URLRequest; | 19 using net::URLRequest; |
21 using net::AuthChallengeInfo; | 20 using net::AuthChallengeInfo; |
22 | 21 |
23 class LoginHandlerAndroid : public LoginHandler { | 22 class LoginHandlerAndroid : public LoginHandler { |
24 public: | 23 public: |
25 LoginHandlerAndroid(AuthChallengeInfo* auth_info, URLRequest* request) | 24 LoginHandlerAndroid(AuthChallengeInfo* auth_info, URLRequest* request) |
26 : LoginHandler(auth_info, request) { | 25 : LoginHandler(auth_info, request) { |
27 } | 26 } |
28 | 27 |
29 // LoginHandler methods: | 28 // LoginHandler methods: |
30 | 29 |
31 void OnAutofillDataAvailable(const base::string16& username, | 30 void OnAutofillDataAvailableInternal( |
32 const base::string16& password) override { | 31 const base::string16& username, |
| 32 const base::string16& password) override { |
33 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 33 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
34 DCHECK(chrome_http_auth_handler_.get() != NULL); | 34 DCHECK(chrome_http_auth_handler_.get() != NULL); |
35 chrome_http_auth_handler_->OnAutofillDataAvailable( | 35 chrome_http_auth_handler_->OnAutofillDataAvailable( |
36 username, password); | 36 username, password); |
37 } | 37 } |
38 void OnLoginModelDestroying() override {} | 38 void OnLoginModelDestroying() override {} |
39 | 39 |
40 void BuildViewForPasswordManager(password_manager::PasswordManager* manager, | 40 void BuildView(const base::string16& explanation, |
41 const base::string16& explanation) override { | 41 LoginModelData* login_model_data) override { |
42 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 42 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
43 | 43 |
44 // Get pointer to TabAndroid | 44 // Get pointer to TabAndroid |
45 content::WebContents* web_contents = GetWebContentsForLogin(); | 45 content::WebContents* web_contents = GetWebContentsForLogin(); |
46 CHECK(web_contents); | 46 CHECK(web_contents); |
47 WindowAndroidHelper* window_helper = WindowAndroidHelper::FromWebContents( | 47 WindowAndroidHelper* window_helper = WindowAndroidHelper::FromWebContents( |
48 web_contents); | 48 web_contents); |
49 | 49 |
50 // Notify WindowAndroid that HTTP authentication is required. | 50 // Notify WindowAndroid that HTTP authentication is required. |
51 if (window_helper->GetWindowAndroid()) { | 51 if (window_helper->GetWindowAndroid()) { |
52 chrome_http_auth_handler_.reset(new ChromeHttpAuthHandler(explanation)); | 52 chrome_http_auth_handler_.reset(new ChromeHttpAuthHandler(explanation)); |
53 chrome_http_auth_handler_->Init(); | 53 chrome_http_auth_handler_->Init(); |
54 chrome_http_auth_handler_->SetObserver(this); | 54 chrome_http_auth_handler_->SetObserver(this); |
55 chrome_http_auth_handler_->ShowDialog( | 55 chrome_http_auth_handler_->ShowDialog( |
56 window_helper->GetWindowAndroid()->GetJavaObject().obj()); | 56 window_helper->GetWindowAndroid()->GetJavaObject().obj()); |
57 | 57 |
58 // Register to receive a callback to OnAutofillDataAvailable(). | 58 if (login_model_data) |
59 SetModel(manager); | 59 SetModel(*login_model_data); |
| 60 else |
| 61 ResetModel(); |
| 62 |
60 NotifyAuthNeeded(); | 63 NotifyAuthNeeded(); |
61 } else { | 64 } else { |
62 CancelAuth(); | 65 CancelAuth(); |
63 LOG(WARNING) << "HTTP Authentication failed because TabAndroid is " | 66 LOG(WARNING) << "HTTP Authentication failed because TabAndroid is " |
64 "missing"; | 67 "missing"; |
65 } | 68 } |
66 } | 69 } |
67 | 70 |
68 protected: | 71 protected: |
69 ~LoginHandlerAndroid() override {} | 72 ~LoginHandlerAndroid() override {} |
70 | 73 |
71 void CloseDialog() override {} | 74 void CloseDialog() override {} |
72 | 75 |
73 private: | 76 private: |
74 scoped_ptr<ChromeHttpAuthHandler> chrome_http_auth_handler_; | 77 scoped_ptr<ChromeHttpAuthHandler> chrome_http_auth_handler_; |
75 }; | 78 }; |
76 | 79 |
77 // static | 80 // static |
78 LoginHandler* LoginHandler::Create(net::AuthChallengeInfo* auth_info, | 81 LoginHandler* LoginHandler::Create(net::AuthChallengeInfo* auth_info, |
79 net::URLRequest* request) { | 82 net::URLRequest* request) { |
80 return new LoginHandlerAndroid(auth_info, request); | 83 return new LoginHandlerAndroid(auth_info, request); |
81 } | 84 } |
OLD | NEW |