blob: 32bc0ca97c9e0d2e429bb5a24d36a44d5d059bb3 [file] [log] [blame]
// Copyright 2015 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 COMPONENTS_HTML_VIEWER_HTML_WIDGET_H_
#define COMPONENTS_HTML_VIEWER_HTML_WIDGET_H_
#include "third_party/WebKit/public/web/WebViewClient.h"
#include "third_party/WebKit/public/web/WebWidgetClient.h"
namespace blink {
class WebFrameWidget;
}
namespace mojo {
class ApplicationImpl;
class View;
}
namespace html_viewer {
class GlobalState;
class ImeController;
class WebLayerTreeViewImpl;
// HTMLWidget is responsible for creation of the WebWidget. Which WebWidget
// and how it is created depends upon the frame the WebWidget is created for.
class HTMLWidget {
public:
virtual ~HTMLWidget() {}
virtual blink::WebWidget* GetWidget() = 0;
virtual void OnViewBoundsChanged(mojo::View* view) = 0;
};
// Used for the root frame when the root frame is remote.
class HTMLWidgetRootRemote : public HTMLWidget {
public:
HTMLWidgetRootRemote();
~HTMLWidgetRootRemote() override;
private:
// HTMLWidget:
blink::WebWidget* GetWidget() override;
void OnViewBoundsChanged(mojo::View* view) override;
blink::WebView* web_view_;
DISALLOW_COPY_AND_ASSIGN(HTMLWidgetRootRemote);
};
// Used for the root frame when the frame is local. If there is only one
// frame in the document, this is the HTMLWidget type created.
class HTMLWidgetRootLocal : public HTMLWidget, public blink::WebViewClient {
public:
struct CreateParams {
CreateParams(mojo::ApplicationImpl* app,
GlobalState* global_state,
mojo::View* view);
~CreateParams();
mojo::ApplicationImpl* app;
GlobalState* global_state;
mojo::View* view;
};
HTMLWidgetRootLocal(CreateParams* create_params);
~HTMLWidgetRootLocal() override;
blink::WebView* web_view() { return web_view_; }
protected:
// WebViewClient methods:
virtual blink::WebStorageNamespace* createSessionStorageNamespace();
virtual void initializeLayerTreeView();
virtual blink::WebLayerTreeView* layerTreeView();
virtual void resetInputMethod();
virtual void didHandleGestureEvent(const blink::WebGestureEvent& event,
bool event_cancelled);
virtual void didUpdateTextOfFocusedElementByNonUserInput();
virtual void showImeIfNeeded();
private:
// HTMLWidget:
blink::WebWidget* GetWidget() override;
void OnViewBoundsChanged(mojo::View* view) override;
mojo::ApplicationImpl* app_;
GlobalState* global_state_;
mojo::View* view_;
blink::WebView* web_view_;
scoped_ptr<WebLayerTreeViewImpl> web_layer_tree_view_impl_;
scoped_ptr<ImeController> ime_controller_;
DISALLOW_COPY_AND_ASSIGN(HTMLWidgetRootLocal);
};
// Used for frames other than the root that are local.
class HTMLWidgetLocalRoot : public HTMLWidget, public blink::WebWidgetClient {
public:
HTMLWidgetLocalRoot(mojo::ApplicationImpl* app,
GlobalState* global_state,
mojo::View* view,
blink::WebLocalFrame* web_local_frame);
~HTMLWidgetLocalRoot() override;
private:
// HTMLWidget:
blink::WebWidget* GetWidget() override;
void OnViewBoundsChanged(mojo::View* view) override;
// WebWidgetClient:
virtual void initializeLayerTreeView();
virtual blink::WebLayerTreeView* layerTreeView();
virtual void resetInputMethod();
virtual void didHandleGestureEvent(const blink::WebGestureEvent& event,
bool event_cancelled);
virtual void didUpdateTextOfFocusedElementByNonUserInput();
virtual void showImeIfNeeded();
mojo::ApplicationImpl* app_;
GlobalState* global_state_;
blink::WebFrameWidget* web_frame_widget_;
scoped_ptr<WebLayerTreeViewImpl> web_layer_tree_view_impl_;
scoped_ptr<ImeController> ime_controller_;
DISALLOW_COPY_AND_ASSIGN(HTMLWidgetLocalRoot);
};
} // namespace html_viewer
#endif // COMPONENTS_HTML_VIEWER_HTML_WIDGET_H_