1 // Copyright 2015 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.
5 #ifndef COMPONENTS_HTML_VIEWER_DOCUMENT_RESOURCE_WAITER_H_
6 #define COMPONENTS_HTML_VIEWER_DOCUMENT_RESOURCE_WAITER_H_
8 #include "base/basictypes.h"
9 #include "components/web_view/public/interfaces/frame_tree.mojom.h"
10 #include "mojo/services/network/public/interfaces/url_loader.mojom.h"
11 #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h"
17 namespace html_viewer
{
19 class HTMLDocumentOOPIF
;
22 // DocumentResourceWaiter waits for the necessary resources needed to load an
23 // HTMLDocument. Use IsReady() to determine when everything is available. Once
24 // ready it is assumed HTMLDocument will call back for the FrameTreeClient and
26 class DocumentResourceWaiter
: public web_view::FrameTreeClient
{
28 DocumentResourceWaiter(GlobalState
* global_state
,
29 mojo::URLResponsePtr response
,
30 HTMLDocumentOOPIF
* document
);
31 ~DocumentResourceWaiter() override
;
33 // Releases all the resources that have been accumulated.
34 void Release(mojo::InterfaceRequest
<web_view::FrameTreeClient
>*
35 frame_tree_client_request
,
36 web_view::FrameTreeServerPtr
* frame_tree_server
,
37 mojo::Array
<web_view::FrameDataPtr
>* frame_data
,
40 web_view::ViewConnectType
* view_connect_type
,
41 OnConnectCallback
* on_connect_callback
);
43 mojo::URLResponsePtr
ReleaseURLResponse();
45 // See class description.
48 void set_root(mojo::View
* root
) { root_
= root
; }
49 mojo::View
* root() { return root_
; }
51 void Bind(mojo::InterfaceRequest
<web_view::FrameTreeClient
> request
);
54 // web_view::FrameTreeClient:
55 void OnConnect(web_view::FrameTreeServerPtr server
,
58 web_view::ViewConnectType view_connect_type
,
59 mojo::Array
<web_view::FrameDataPtr
> frame_data
,
60 const OnConnectCallback
& callback
) override
;
61 void OnFrameAdded(uint32_t change_id
,
62 web_view::FrameDataPtr frame_data
) override
;
63 void OnFrameRemoved(uint32_t change_id
, uint32_t frame_id
) override
;
64 void OnFrameClientPropertyChanged(uint32_t frame_id
,
65 const mojo::String
& name
,
66 mojo::Array
<uint8_t> new_value
) override
;
67 void OnPostMessageEvent(uint32_t source_frame_id
,
68 uint32_t target_frame_id
,
69 web_view::HTMLMessageEventPtr event
) override
;
70 void OnWillNavigate(uint32_t target_frame_id
) override
;
72 GlobalState
* global_state_
;
73 HTMLDocumentOOPIF
* document_
;
74 mojo::URLResponsePtr response_
;
76 web_view::FrameTreeServerPtr server_
;
77 mojo::Array
<web_view::FrameDataPtr
> frame_data_
;
80 web_view::ViewConnectType view_connect_type_
;
81 OnConnectCallback on_connect_callback_
;
83 // Once we get OnConnect() we unbind |frame_tree_client_binding_| and put it
85 mojo::InterfaceRequest
<web_view::FrameTreeClient
> frame_tree_client_request_
;
86 mojo::Binding
<web_view::FrameTreeClient
> frame_tree_client_binding_
;
88 DISALLOW_COPY_AND_ASSIGN(DocumentResourceWaiter
);
91 } // namespace html_viewer
93 #endif // COMPONENTS_HTML_VIEWER_DOCUMENT_RESOURCE_WAITER_H_