blob: 7ef139d547db8a98f5c937b5b2da550e5a5c6620 [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 "base/macros.h"
#include "third_party/WebKit/public/web/WebViewClient.h"
#include "third_party/WebKit/public/web/WebWidgetClient.h"
namespace blink {
class WebFrameWidget;
}
namespace mojo {
class Shell;
}
namespace mus {
class Window;
}
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 OnWindowBoundsChanged(mus::Window* window) = 0;
};
// Used for the root frame when the root frame is remote.
class HTMLWidgetRootRemote : public HTMLWidget, public blink::WebViewClient {
public:
explicit HTMLWidgetRootRemote(GlobalState* global_state);
~HTMLWidgetRootRemote() override;
private:
// WebViewClient methods:
blink::WebStorageNamespace* createSessionStorageNamespace() override;
bool allowsBrokenNullLayerTreeView() const override;
// HTMLWidget:
blink::WebWidget* GetWidget() override;
void OnWindowBoundsChanged(mus::Window* window) 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::Shell* shell,
GlobalState* global_state,
mus::Window* window);
~CreateParams();
mojo::Shell* shell;
GlobalState* global_state;
mus::Window* window;
};
HTMLWidgetRootLocal(CreateParams* create_params);
~HTMLWidgetRootLocal() override;
blink::WebView* web_view() { return web_view_; }
protected:
// WebViewClient methods:
blink::WebStorageNamespace* createSessionStorageNamespace() override;
void initializeLayerTreeView() override;
blink::WebLayerTreeView* layerTreeView() override;
void didMeaningfulLayout(blink::WebMeaningfulLayout layout_type) override;
void resetInputMethod() override;
void didHandleGestureEvent(const blink::WebGestureEvent& event,
bool event_cancelled) override;
void didUpdateTextOfFocusedElementByNonUserInput() override;
void showImeIfNeeded() override;
private:
// HTMLWidget:
blink::WebWidget* GetWidget() override;
void OnWindowBoundsChanged(mus::Window* window) override;
mojo::Shell* shell_;
GlobalState* global_state_;
mus::Window* window_;
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::Shell* shell,
GlobalState* global_state,
mus::Window* window,
blink::WebLocalFrame* web_local_frame);
~HTMLWidgetLocalRoot() override;
private:
// HTMLWidget:
blink::WebWidget* GetWidget() override;
void OnWindowBoundsChanged(mus::Window* window) override;
// WebWidgetClient:
void initializeLayerTreeView() override;
blink::WebLayerTreeView* layerTreeView() override;
void resetInputMethod() override;
void didHandleGestureEvent(const blink::WebGestureEvent& event,
bool event_cancelled) override;
void didUpdateTextOfFocusedElementByNonUserInput() override;
void showImeIfNeeded() override;
mojo::Shell* shell_;
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_