web_page_view.cc revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1// Copyright (c) 2009 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/chromeos/login/web_page_view.h" 6 7#include "app/l10n_util.h" 8#include "app/resource_bundle.h" 9#include "base/callback.h" 10#include "base/string_util.h" 11#include "base/time.h" 12#include "base/values.h" 13#include "chrome/browser/child_process_security_policy.h" 14#include "chrome/browser/chromeos/login/helper.h" 15#include "chrome/browser/chromeos/login/rounded_rect_painter.h" 16#include "chrome/browser/dom_ui/dom_ui.h" 17#include "chrome/browser/tab_contents/tab_contents.h" 18#include "chrome/common/bindings_policy.h" 19#include "gfx/canvas.h" 20#include "grit/generated_resources.h" 21#include "grit/theme_resources.h" 22#include "ipc/ipc_message.h" 23#include "third_party/skia/include/core/SkColor.h" 24#include "views/background.h" 25#include "views/border.h" 26#include "views/controls/label.h" 27#include "views/controls/throbber.h" 28 29using base::TimeDelta; 30using views::Label; 31using views::View; 32using webkit_glue::FormData; 33 34namespace chromeos { 35 36namespace { 37 38// Spacing (vertical/horizontal) between controls. 39const int kSpacing = 10; 40 41// Time in ms after that waiting controls are shown on Start. 42const int kStartDelayMs = 500; 43 44// Time in ms after that waiting controls are hidden on Stop. 45const int kStopDelayMs = 500; 46 47} // namespace 48 49/////////////////////////////////////////////////////////////////////////////// 50// WizardWebPageViewTabContents, public: 51 52WizardWebPageViewTabContents::WizardWebPageViewTabContents( 53 Profile* profile, 54 SiteInstance* site_instance, 55 WebPageDelegate* page_delegate) 56 : TabContents(profile, site_instance, MSG_ROUTING_NONE, NULL), 57 page_delegate_(page_delegate) { 58 } 59 60void WizardWebPageViewTabContents::DidFailProvisionalLoadWithError( 61 RenderViewHost* render_view_host, 62 bool is_main_frame, 63 int error_code, 64 const GURL& url, 65 bool showing_repost_interstitial) { 66 page_delegate_->OnPageLoadFailed(url.spec()); 67} 68 69void WizardWebPageViewTabContents::DidDisplayInsecureContent() { 70 page_delegate_->OnPageLoadFailed(""); 71} 72 73void WizardWebPageViewTabContents::DidRunInsecureContent( 74 const std::string& security_origin) { 75 page_delegate_->OnPageLoadFailed(security_origin); 76} 77 78void WizardWebPageViewTabContents::DocumentLoadedInFrame() { 79 page_delegate_->OnPageLoaded(); 80} 81 82void WizardWebPageViewTabContents::OnContentBlocked(ContentSettingsType type) { 83 page_delegate_->OnPageLoadFailed(""); 84} 85 86/////////////////////////////////////////////////////////////////////////////// 87// WebPageDomView, public: 88 89void WebPageDomView::SetTabContentsDelegate( 90 TabContentsDelegate* delegate) { 91 tab_contents_->set_delegate(delegate); 92} 93 94/////////////////////////////////////////////////////////////////////////////// 95// WebPageView, public: 96 97void WebPageView::Init() { 98 views::Painter* painter = CreateWizardPainter( 99 &BorderDefinition::kScreenBorder); 100 set_background( 101 views::Background::CreateBackgroundPainter(true, painter)); 102 set_border(CreateWizardBorder(&BorderDefinition::kScreenBorder)); 103 dom_view()->SetVisible(false); 104 AddChildView(dom_view()); 105 106 throbber_ = CreateDefaultThrobber(); 107 AddChildView(throbber_); 108 109 connecting_label_ = new views::Label(); 110 connecting_label_->SetText(l10n_util::GetString(IDS_LOAD_STATE_CONNECTING)); 111 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 112 connecting_label_->SetFont(rb.GetFont(ResourceBundle::MediumFont)); 113 connecting_label_->SetVisible(false); 114 AddChildView(connecting_label_ ); 115 116 start_timer_.Start(TimeDelta::FromMilliseconds(kStartDelayMs), 117 this, 118 &WebPageView::ShowWaitingControls); 119} 120 121void WebPageView::InitDOM(Profile* profile, 122 SiteInstance* site_instance) { 123 dom_view()->Init(profile, site_instance); 124} 125 126void WebPageView::LoadURL(const GURL& url) { 127 dom_view()->LoadURL(url); 128} 129 130void WebPageView::SetTabContentsDelegate( 131 TabContentsDelegate* delegate) { 132 dom_view()->SetTabContentsDelegate(delegate); 133} 134 135void WebPageView::SetWebPageDelegate(WebPageDelegate* delegate) { 136 dom_view()->set_web_page_delegate(delegate); 137} 138 139void WebPageView::ShowPageContent() { 140 // TODO(nkostylev): Show throbber as an overlay until page has been rendered. 141 start_timer_.Stop(); 142 if (!stop_timer_.IsRunning()) { 143 stop_timer_.Start(TimeDelta::FromMilliseconds(kStopDelayMs), 144 this, 145 &WebPageView::ShowRenderedPage); 146 } 147} 148 149/////////////////////////////////////////////////////////////////////////////// 150// WebPageView, private: 151 152void WebPageView::ShowRenderedPage() { 153 throbber_->Stop(); 154 connecting_label_->SetVisible(false); 155 dom_view()->SetVisible(true); 156} 157 158void WebPageView::ShowWaitingControls() { 159 throbber_->Start(); 160 connecting_label_->SetVisible(true); 161} 162 163/////////////////////////////////////////////////////////////////////////////// 164// WebPageView, views::View implementation: 165 166void WebPageView::Layout() { 167 dom_view()->SetBounds(GetLocalBounds(false)); 168 int y = height() / 2 - throbber_->GetPreferredSize().height() / 2; 169 throbber_->SetBounds( 170 width() / 2 - throbber_->GetPreferredSize().width() / 2, 171 y, 172 throbber_->GetPreferredSize().width(), 173 throbber_->GetPreferredSize().height()); 174 connecting_label_->SetBounds( 175 width() / 2 - connecting_label_->GetPreferredSize().width() / 2, 176 y + throbber_->GetPreferredSize().height() + kSpacing, 177 connecting_label_->GetPreferredSize().width(), 178 connecting_label_->GetPreferredSize().height()); 179} 180 181} // namespace chromeos 182