// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_WEB_PAGE_VIEW_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_WEB_PAGE_VIEW_H_
#pragma once
#include <string>
#include "base/timer.h"
#include "chrome/browser/ui/views/dom_view.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "views/view.h"
class Profile;
class SiteContents;
class TabContentsDelegate;
namespace views {
class Label;
class Throbber;
} // namespace views
namespace chromeos {
// Delegate interface for listening to common events during page load.
class WebPageDelegate {
public:
virtual ~WebPageDelegate() {}
// Notify about document load event.
virtual void OnPageLoaded() = 0;
// Notify about navigation errors.
virtual void OnPageLoadFailed(const std::string& url) = 0;
};
// Base class for tab contents for pages rendered on wizard screens.
class WizardWebPageViewTabContents : public TabContents {
public:
WizardWebPageViewTabContents(Profile* profile,
SiteInstance* site_instance,
WebPageDelegate* page_delegate);
virtual void DidFailProvisionalLoadWithError(
RenderViewHost* render_view_host,
bool is_main_frame,
int error_code,
const GURL& url,
bool showing_repost_interstitial);
virtual void DidDisplayInsecureContent();
virtual void DidRunInsecureContent(const std::string& security_origin);
virtual void DocumentLoadedInFrame(long long frame_id);
virtual void DidFinishLoad(long long frame_id);
virtual void OnContentBlocked(ContentSettingsType type);
private:
WebPageDelegate* page_delegate_;
DISALLOW_COPY_AND_ASSIGN(WizardWebPageViewTabContents);
};
// WebPageDomView is the view that is rendering the page.
class WebPageDomView : public DOMView {
public:
WebPageDomView() : page_delegate_(NULL) {}
// Set delegate that will be notified about tab contents changes.
void SetTabContentsDelegate(TabContentsDelegate* delegate);
// Set delegate that will be notified about page events.
void set_web_page_delegate(WebPageDelegate* delegate) {
page_delegate_ = delegate;
}
protected:
// Overriden from DOMView:
virtual TabContents* CreateTabContents(Profile* profile,
SiteInstance* instance) = 0;
WebPageDelegate* page_delegate_;
private:
DISALLOW_COPY_AND_ASSIGN(WebPageDomView);
};
// WebPageView represents the view that holds WebPageDomView with
// page rendered in it. While page is loaded spinner overlay is shown.
class WebPageView : public views::View {
public:
WebPageView() : throbber_(NULL), connecting_label_(NULL) {}
// Initialize view layout.
void Init();
// Initialize the DOM view, creating the contents. This should be
// called once the view has been added to a container.
void InitDOM(Profile* profile, SiteInstance* site_instance);
// Loads the given URL into the page.
// You must have previously called Init() and SetTabContentsDelegate.
void LoadURL(const GURL& url);
// Sets delegate for tab contents changes.
void SetTabContentsDelegate(TabContentsDelegate* delegate);
// Set delegate that will be notified about page events.
void SetWebPageDelegate(WebPageDelegate* delegate);
// Stops throbber and shows page content (starts renderer_timer_ for that).
void ShowPageContent();
protected:
virtual WebPageDomView* dom_view() = 0;
private:
// Overriden from views::View:
virtual void Layout();
// Called by stop_timer_. Shows rendered page.
void ShowRenderedPage();
// Called by start_timer_. Shows throbber and waiting label.
void ShowWaitingControls();
// Throbber shown during page load.
views::Throbber* throbber_;
// "Connecting..." label shown while waiting for the page to load/render.
views::Label* connecting_label_;
// Timer used when waiting for network response.
base::OneShotTimer<WebPageView> start_timer_;
// Timer used before toggling loaded page visibility.
base::OneShotTimer<WebPageView> stop_timer_;
DISALLOW_COPY_AND_ASSIGN(WebPageView);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_WEB_PAGE_VIEW_H_