158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/first_run/first_run_view.h"
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/extensions/chrome_extension_web_contents_observer.h"
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/first_run/first_run_ui.h"
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/url_constants.h"
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/browser/render_view_host.h"
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/browser/render_widget_host_view.h"
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/browser/web_contents.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h"
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h"
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/views/controls/webview/webview.h"
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "url/gurl.h"
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace chromeos {
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)FirstRunView::FirstRunView()
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    : web_view_(NULL) {
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void FirstRunView::Init(content::BrowserContext* context) {
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  web_view_ = new views::WebView(context);
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  AddChildView(web_view_);
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  web_view_->LoadInitialURL(GURL(chrome::kChromeUIFirstRunURL));
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  content::WebContents* web_contents = web_view_->web_contents();
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  web_contents->SetDelegate(this);
3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  extensions::ChromeExtensionWebContentsObserver::CreateForWebContents(
3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      web_contents);
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  web_contents->GetRenderViewHost()->GetView()->SetBackgroundOpaque(false);
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)FirstRunActor* FirstRunView::GetActor() {
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return static_cast<FirstRunUI*>(
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      web_view_->web_contents()->GetWebUI()->GetController())->get_actor();
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void FirstRunView::Layout() {
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  web_view_->SetBoundsRect(bounds());
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FirstRunView::RequestFocus() {
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  web_view_->RequestFocus();
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)content::WebContents* FirstRunView::GetWebContents() {
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return web_view_->web_contents();
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool FirstRunView::HandleContextMenu(
5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    const content::ContextMenuParams& params) {
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Discards context menu.
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return true;
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool FirstRunView::PreHandleGestureEvent(
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    content::WebContents* source,
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const blink::WebGestureEvent& event) {
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Disable pinch zooming.
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return event.type == blink::WebGestureEvent::GesturePinchBegin ||
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      event.type == blink::WebGestureEvent::GesturePinchUpdate ||
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      event.type == blink::WebGestureEvent::GesturePinchEnd;
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace chromeos
7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
71