OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/html_viewer/html_document_application_delegate.h" | 5 #include "components/html_viewer/html_document_application_delegate.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "components/html_viewer/global_state.h" | 9 #include "components/html_viewer/global_state.h" |
10 #include "components/html_viewer/html_document.h" | |
11 #include "components/html_viewer/html_document_oopif.h" | 10 #include "components/html_viewer/html_document_oopif.h" |
12 #include "components/html_viewer/html_viewer_switches.h" | 11 #include "components/html_viewer/html_viewer_switches.h" |
13 #include "mojo/application/public/cpp/application_connection.h" | 12 #include "mojo/application/public/cpp/application_connection.h" |
14 #include "mojo/application/public/cpp/application_delegate.h" | 13 #include "mojo/application/public/cpp/application_delegate.h" |
15 #include "mojo/application/public/cpp/connect.h" | 14 #include "mojo/application/public/cpp/connect.h" |
16 | 15 |
17 namespace html_viewer { | 16 namespace html_viewer { |
18 | 17 |
19 namespace { | 18 namespace { |
20 | 19 |
21 bool EnableOOPIFs() { | 20 bool EnableOOPIFs() { |
22 return base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kOOPIF); | 21 return base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kOOPIF); |
23 } | 22 } |
24 | 23 |
| 24 HTMLDocument* CreateHTMLDocument(HTMLDocument::CreateParams* params) { |
| 25 return new HTMLDocument(params); |
| 26 } |
| 27 |
25 } // namespace | 28 } // namespace |
26 | 29 |
27 // ServiceConnectorQueue records all incoming service requests and processes | 30 // ServiceConnectorQueue records all incoming service requests and processes |
28 // them once PushRequestsTo() is called. This is useful if you need to delay | 31 // them once PushRequestsTo() is called. This is useful if you need to delay |
29 // processing incoming service requests. | 32 // processing incoming service requests. |
30 class HTMLDocumentApplicationDelegate::ServiceConnectorQueue | 33 class HTMLDocumentApplicationDelegate::ServiceConnectorQueue |
31 : public mojo::ServiceConnector { | 34 : public mojo::ServiceConnector { |
32 public: | 35 public: |
33 ServiceConnectorQueue() {} | 36 ServiceConnectorQueue() {} |
34 ~ServiceConnectorQueue() override {} | 37 ~ServiceConnectorQueue() override {} |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 mojo::URLResponsePtr response, | 71 mojo::URLResponsePtr response, |
69 GlobalState* global_state, | 72 GlobalState* global_state, |
70 scoped_ptr<mojo::AppRefCount> parent_app_refcount) | 73 scoped_ptr<mojo::AppRefCount> parent_app_refcount) |
71 : app_(this, | 74 : app_(this, |
72 request.Pass(), | 75 request.Pass(), |
73 base::Bind(&HTMLDocumentApplicationDelegate::OnTerminate, | 76 base::Bind(&HTMLDocumentApplicationDelegate::OnTerminate, |
74 base::Unretained(this))), | 77 base::Unretained(this))), |
75 parent_app_refcount_(parent_app_refcount.Pass()), | 78 parent_app_refcount_(parent_app_refcount.Pass()), |
76 url_(response->url), | 79 url_(response->url), |
77 initial_response_(response.Pass()), | 80 initial_response_(response.Pass()), |
78 global_state_(global_state) { | 81 global_state_(global_state), |
| 82 html_document_creation_callback_(base::Bind(CreateHTMLDocument)) { |
79 } | 83 } |
80 | 84 |
81 HTMLDocumentApplicationDelegate::~HTMLDocumentApplicationDelegate() { | 85 HTMLDocumentApplicationDelegate::~HTMLDocumentApplicationDelegate() { |
82 // Deleting the documents is going to trigger a callback to | 86 // Deleting the documents is going to trigger a callback to |
83 // OnHTMLDocumentDeleted() and remove from |documents_|. Copy the set so we | 87 // OnHTMLDocumentDeleted() and remove from |documents_|. Copy the set so we |
84 // don't have to worry about the set being modified out from under us. | 88 // don't have to worry about the set being modified out from under us. |
85 std::set<HTMLDocument*> documents(documents_); | 89 std::set<HTMLDocument*> documents(documents_); |
86 for (HTMLDocument* doc : documents) | 90 for (HTMLDocument* doc : documents) |
87 doc->Destroy(); | 91 doc->Destroy(); |
88 DCHECK(documents_.empty()); | 92 DCHECK(documents_.empty()); |
89 | 93 |
90 std::set<HTMLDocumentOOPIF*> documents2(documents2_); | 94 std::set<HTMLDocumentOOPIF*> documents2(documents2_); |
91 for (HTMLDocumentOOPIF* doc : documents2) | 95 for (HTMLDocumentOOPIF* doc : documents2) |
92 doc->Destroy(); | 96 doc->Destroy(); |
93 DCHECK(documents2_.empty()); | 97 DCHECK(documents2_.empty()); |
94 } | 98 } |
95 | 99 |
| 100 void HTMLDocumentApplicationDelegate::SetHTMLDocumentCreationCallback( |
| 101 const HTMLDocumentCreationCallback& callback) { |
| 102 html_document_creation_callback_ = callback; |
| 103 } |
| 104 |
96 // Callback from the quit closure. We key off this rather than | 105 // Callback from the quit closure. We key off this rather than |
97 // ApplicationDelegate::Quit() as we don't want to shut down the messageloop | 106 // ApplicationDelegate::Quit() as we don't want to shut down the messageloop |
98 // when we quit (the messageloop is shared among multiple | 107 // when we quit (the messageloop is shared among multiple |
99 // HTMLDocumentApplicationDelegates). | 108 // HTMLDocumentApplicationDelegates). |
100 void HTMLDocumentApplicationDelegate::OnTerminate() { | 109 void HTMLDocumentApplicationDelegate::OnTerminate() { |
101 delete this; | 110 delete this; |
102 } | 111 } |
103 | 112 |
104 // ApplicationDelegate; | 113 // ApplicationDelegate; |
105 void HTMLDocumentApplicationDelegate::Initialize(mojo::ApplicationImpl* app) { | 114 void HTMLDocumentApplicationDelegate::Initialize(mojo::ApplicationImpl* app) { |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 HTMLDocumentOOPIF* document = new HTMLDocumentOOPIF( | 174 HTMLDocumentOOPIF* document = new HTMLDocumentOOPIF( |
166 &app_, connection, response.Pass(), global_state_, | 175 &app_, connection, response.Pass(), global_state_, |
167 base::Bind(&HTMLDocumentApplicationDelegate::OnHTMLDocumentDeleted2, | 176 base::Bind(&HTMLDocumentApplicationDelegate::OnHTMLDocumentDeleted2, |
168 base::Unretained(this))); | 177 base::Unretained(this))); |
169 documents2_.insert(document); | 178 documents2_.insert(document); |
170 } else { | 179 } else { |
171 HTMLDocument::CreateParams params( | 180 HTMLDocument::CreateParams params( |
172 &app_, connection, response.Pass(), global_state_, | 181 &app_, connection, response.Pass(), global_state_, |
173 base::Bind(&HTMLDocumentApplicationDelegate::OnHTMLDocumentDeleted, | 182 base::Bind(&HTMLDocumentApplicationDelegate::OnHTMLDocumentDeleted, |
174 base::Unretained(this))); | 183 base::Unretained(this))); |
175 HTMLDocument* document = new HTMLDocument(¶ms); | 184 HTMLDocument* document = html_document_creation_callback_.Run(¶ms); |
176 documents_.insert(document); | 185 documents_.insert(document); |
177 } | 186 } |
178 | 187 |
179 if (connector_queue) { | 188 if (connector_queue) { |
180 connector_queue->PushRequestsTo(connection); | 189 connector_queue->PushRequestsTo(connection); |
181 connection->SetServiceConnector(nullptr); | 190 connection->SetServiceConnector(nullptr); |
182 } | 191 } |
183 } | 192 } |
184 | 193 |
185 } // namespace html_viewer | 194 } // namespace html_viewer |
OLD | NEW |