| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/chromeos/login/ui/webui_login_view.h" | 5 #include "chrome/browser/chromeos/login/ui/webui_login_view.h" |
| 6 | 6 |
| 7 #include "ash/common/focus_cycler.h" | 7 #include "ash/common/focus_cycler.h" |
| 8 #include "ash/common/system/status_area_widget_delegate.h" | 8 #include "ash/common/system/status_area_widget_delegate.h" |
| 9 #include "ash/common/system/tray/system_tray.h" | 9 #include "ash/common/system/tray/system_tray.h" |
| 10 #include "ash/common/wm_shell.h" | 10 #include "ash/common/wm_shell.h" |
| 11 #include "ash/shell.h" | 11 #include "ash/shell.h" |
| 12 #include "base/bind.h" | 12 #include "base/bind.h" |
| 13 #include "base/callback.h" | 13 #include "base/callback.h" |
| 14 #include "base/i18n/rtl.h" | 14 #include "base/i18n/rtl.h" |
| 15 #include "base/logging.h" | 15 #include "base/logging.h" |
| 16 #include "base/macros.h" | 16 #include "base/macros.h" |
| 17 #include "base/strings/utf_string_conversions.h" | 17 #include "base/strings/utf_string_conversions.h" |
| 18 #include "base/trace_event/trace_event.h" | 18 #include "base/trace_event/trace_event.h" |
| 19 #include "base/values.h" | 19 #include "base/values.h" |
| 20 #include "chrome/browser/chrome_notification_types.h" | 20 #include "chrome/browser/chrome_notification_types.h" |
| 21 #include "chrome/browser/chromeos/accessibility/accessibility_util.h" | 21 #include "chrome/browser/chromeos/accessibility/accessibility_util.h" |
| 22 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" | 22 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" |
| 23 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" | 23 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" |
| 24 #include "chrome/browser/chromeos/login/ui/preloaded_web_view.h" |
| 25 #include "chrome/browser/chromeos/login/ui/preloaded_web_view_factory.h" |
| 24 #include "chrome/browser/chromeos/login/ui/proxy_settings_dialog.h" | 26 #include "chrome/browser/chromeos/login/ui/proxy_settings_dialog.h" |
| 25 #include "chrome/browser/chromeos/login/ui/shared_web_view.h" | |
| 26 #include "chrome/browser/chromeos/login/ui/shared_web_view_factory.h" | |
| 27 #include "chrome/browser/chromeos/login/ui/web_contents_forced_title.h" | 27 #include "chrome/browser/chromeos/login/ui/web_contents_forced_title.h" |
| 28 #include "chrome/browser/chromeos/login/ui/web_contents_set_background_color.h" | 28 #include "chrome/browser/chromeos/login/ui/web_contents_set_background_color.h" |
| 29 #include "chrome/browser/chromeos/login/ui/web_view_handle.h" | |
| 30 #include "chrome/browser/chromeos/login/ui/webui_login_display.h" | 29 #include "chrome/browser/chromeos/login/ui/webui_login_display.h" |
| 31 #include "chrome/browser/chromeos/profiles/profile_helper.h" | 30 #include "chrome/browser/chromeos/profiles/profile_helper.h" |
| 32 #include "chrome/browser/chromeos/settings/cros_settings.h" | 31 #include "chrome/browser/chromeos/settings/cros_settings.h" |
| 33 #include "chrome/browser/extensions/chrome_extension_web_contents_observer.h" | 32 #include "chrome/browser/extensions/chrome_extension_web_contents_observer.h" |
| 34 #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h" | 33 #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h" |
| 35 #include "chrome/browser/media/webrtc/media_stream_devices_controller.h" | 34 #include "chrome/browser/media/webrtc/media_stream_devices_controller.h" |
| 36 #include "chrome/browser/password_manager/chrome_password_manager_client.h" | 35 #include "chrome/browser/password_manager/chrome_password_manager_client.h" |
| 37 #include "chrome/browser/renderer_preferences_util.h" | 36 #include "chrome/browser/renderer_preferences_util.h" |
| 38 #include "chrome/browser/sessions/session_tab_helper.h" | 37 #include "chrome/browser/sessions/session_tab_helper.h" |
| 39 #include "chrome/browser/ui/ash/ash_util.h" | 38 #include "chrome/browser/ui/ash/ash_util.h" |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 ash::Shell::GetInstance()->GetPrimarySystemTray()->GetWidget(); | 250 ash::Shell::GetInstance()->GetPrimarySystemTray()->GetWidget(); |
| 252 ash::StatusAreaWidgetDelegate* status_area_widget_delegate = | 251 ash::StatusAreaWidgetDelegate* status_area_widget_delegate = |
| 253 static_cast<ash::StatusAreaWidgetDelegate*>( | 252 static_cast<ash::StatusAreaWidgetDelegate*>( |
| 254 tray_widget->GetContentsView()); | 253 tray_widget->GetContentsView()); |
| 255 status_area_widget_delegate->set_custom_focus_traversable(nullptr); | 254 status_area_widget_delegate->set_custom_focus_traversable(nullptr); |
| 256 status_area_widget_delegate->set_default_last_focusable_child(false); | 255 status_area_widget_delegate->set_default_last_focusable_child(false); |
| 257 } else { | 256 } else { |
| 258 NOTIMPLEMENTED(); | 257 NOTIMPLEMENTED(); |
| 259 } | 258 } |
| 260 | 259 |
| 261 // If the WebView is going to be reused, make sure we call teardown. | |
| 262 if (!webui_login_->HasOneRef()) | |
| 263 GetWebUI()->CallJavascriptFunctionUnsafe("cr.ui.Oobe.teardown"); | |
| 264 | |
| 265 // Clear any delegates we have set on the WebView. | 260 // Clear any delegates we have set on the WebView. |
| 266 WebContents* web_contents = web_view()->GetWebContents(); | 261 WebContents* web_contents = web_view()->GetWebContents(); |
| 267 WebContentsModalDialogManager::FromWebContents(web_contents) | 262 WebContentsModalDialogManager::FromWebContents(web_contents) |
| 268 ->SetDelegate(nullptr); | 263 ->SetDelegate(nullptr); |
| 269 web_contents->SetDelegate(nullptr); | 264 web_contents->SetDelegate(nullptr); |
| 270 } | 265 } |
| 271 | 266 |
| 272 // static | 267 // static |
| 273 void WebUILoginView::InitializeWebView(views::WebView* web_view, | 268 void WebUILoginView::InitializeWebView(views::WebView* web_view, |
| 274 const base::string16& title) { | 269 const base::string16& title) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 297 extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( | 292 extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( |
| 298 web_contents); | 293 web_contents); |
| 299 content::RendererPreferences* prefs = web_contents->GetMutableRendererPrefs(); | 294 content::RendererPreferences* prefs = web_contents->GetMutableRendererPrefs(); |
| 300 renderer_preferences_util::UpdateFromSystemSettings( | 295 renderer_preferences_util::UpdateFromSystemSettings( |
| 301 prefs, ProfileHelper::GetSigninProfile(), web_contents); | 296 prefs, ProfileHelper::GetSigninProfile(), web_contents); |
| 302 } | 297 } |
| 303 | 298 |
| 304 void WebUILoginView::Init() { | 299 void WebUILoginView::Init() { |
| 305 Profile* signin_profile = ProfileHelper::GetSigninProfile(); | 300 Profile* signin_profile = ProfileHelper::GetSigninProfile(); |
| 306 | 301 |
| 307 if (!settings_.preloaded_url.is_empty()) { | 302 if (settings_.check_for_preload) { |
| 308 SharedWebView* shared_web_view = | 303 PreloadedWebView* preloaded_web_view = |
| 309 SharedWebViewFactory::GetForProfile(signin_profile); | 304 PreloadedWebViewFactory::GetForProfile(signin_profile); |
| 310 is_reusing_webview_ = | 305 // webui_login_ may still be null after this call if there is no preloaded |
| 311 shared_web_view->Get(settings_.preloaded_url, &webui_login_); | 306 // instance. |
| 312 } else { | 307 webui_login_ = preloaded_web_view->TryTake(); |
| 313 webui_login_ = new WebViewHandle(signin_profile); | 308 is_reusing_webview_ = true; |
| 309 } |
| 310 |
| 311 if (!webui_login_) { |
| 312 webui_login_ = base::MakeUnique<views::WebView>(signin_profile); |
| 313 webui_login_->set_owned_by_client(); |
| 314 is_reusing_webview_ = false; | 314 is_reusing_webview_ = false; |
| 315 } | 315 } |
| 316 | 316 |
| 317 WebContents* web_contents = web_view()->GetWebContents(); | 317 WebContents* web_contents = web_view()->GetWebContents(); |
| 318 if (!is_reusing_webview_) | 318 if (!is_reusing_webview_) |
| 319 InitializeWebView(web_view(), settings_.web_view_title); | 319 InitializeWebView(web_view(), settings_.web_view_title); |
| 320 | 320 |
| 321 web_view()->set_allow_accelerators(true); | 321 web_view()->set_allow_accelerators(true); |
| 322 AddChildView(web_view()); | 322 AddChildView(web_view()); |
| 323 | 323 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 } | 385 } |
| 386 | 386 |
| 387 return true; | 387 return true; |
| 388 } | 388 } |
| 389 | 389 |
| 390 gfx::NativeWindow WebUILoginView::GetNativeWindow() const { | 390 gfx::NativeWindow WebUILoginView::GetNativeWindow() const { |
| 391 return GetWidget()->GetNativeWindow(); | 391 return GetWidget()->GetNativeWindow(); |
| 392 } | 392 } |
| 393 | 393 |
| 394 void WebUILoginView::LoadURL(const GURL& url) { | 394 void WebUILoginView::LoadURL(const GURL& url) { |
| 395 // If a preloaded_url is provided then |url| must match it. | 395 if (!is_reusing_webview_) |
| 396 DCHECK(settings_.preloaded_url.is_empty() || url == settings_.preloaded_url); | |
| 397 | |
| 398 if (is_reusing_webview_ && !settings_.preloaded_url.is_empty()) | |
| 399 GetWebUI()->CallJavascriptFunctionUnsafe("cr.ui.Oobe.reload"); | |
| 400 else | |
| 401 web_view()->LoadInitialURL(url); | 396 web_view()->LoadInitialURL(url); |
| 402 web_view()->RequestFocus(); | 397 web_view()->RequestFocus(); |
| 403 | 398 |
| 404 // There is no Shell instance while running in mash. | 399 // There is no Shell instance while running in mash. |
| 405 if (chrome::IsRunningInMash()) | 400 if (chrome::IsRunningInMash()) |
| 406 return; | 401 return; |
| 407 | 402 |
| 408 ash::StatusAreaWidgetDelegate* status_area_widget_delegate = | 403 ash::StatusAreaWidgetDelegate* status_area_widget_delegate = |
| 409 GetStatusAreaWidgetDelegate(); | 404 GetStatusAreaWidgetDelegate(); |
| 410 DCHECK(status_area_widget_delegate); | 405 DCHECK(status_area_widget_delegate); |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 519 OnLoginPromptVisible(); | 514 OnLoginPromptVisible(); |
| 520 registrar_.RemoveAll(); | 515 registrar_.RemoveAll(); |
| 521 break; | 516 break; |
| 522 } | 517 } |
| 523 default: | 518 default: |
| 524 NOTREACHED() << "Unexpected notification " << type; | 519 NOTREACHED() << "Unexpected notification " << type; |
| 525 } | 520 } |
| 526 } | 521 } |
| 527 | 522 |
| 528 views::WebView* WebUILoginView::web_view() { | 523 views::WebView* WebUILoginView::web_view() { |
| 529 return webui_login_->web_view(); | 524 return webui_login_.get(); |
| 530 } | 525 } |
| 531 | 526 |
| 532 // WebUILoginView private: ----------------------------------------------------- | 527 // WebUILoginView private: ----------------------------------------------------- |
| 533 | 528 |
| 534 bool WebUILoginView::HandleContextMenu( | 529 bool WebUILoginView::HandleContextMenu( |
| 535 const content::ContextMenuParams& params) { | 530 const content::ContextMenuParams& params) { |
| 536 // Do not show the context menu. | 531 // Do not show the context menu. |
| 537 #ifndef NDEBUG | 532 #ifndef NDEBUG |
| 538 return false; | 533 return false; |
| 539 #else | 534 #else |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 if (should_emit_login_prompt_visible_) { | 657 if (should_emit_login_prompt_visible_) { |
| 663 VLOG(1) << "Login WebUI >> login-prompt-visible"; | 658 VLOG(1) << "Login WebUI >> login-prompt-visible"; |
| 664 chromeos::DBusThreadManager::Get()->GetSessionManagerClient()-> | 659 chromeos::DBusThreadManager::Get()->GetSessionManagerClient()-> |
| 665 EmitLoginPromptVisible(); | 660 EmitLoginPromptVisible(); |
| 666 } | 661 } |
| 667 | 662 |
| 668 webui_visible_ = true; | 663 webui_visible_ = true; |
| 669 } | 664 } |
| 670 | 665 |
| 671 } // namespace chromeos | 666 } // namespace chromeos |
| OLD | NEW |