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 "blimp/engine/feature/engine_render_widget_feature.h" | 5 #include "blimp/engine/feature/engine_render_widget_feature.h" |
6 | 6 |
7 #include "base/numerics/safe_conversions.h" | 7 #include "base/numerics/safe_conversions.h" |
8 #include "blimp/common/create_blimp_message.h" | 8 #include "blimp/common/create_blimp_message.h" |
9 #include "blimp/common/proto/blimp_message.pb.h" | 9 #include "blimp/common/proto/blimp_message.pb.h" |
10 #include "blimp/common/proto/compositor.pb.h" | 10 #include "blimp/common/proto/compositor.pb.h" |
11 #include "blimp/common/proto/input.pb.h" | 11 #include "blimp/common/proto/input.pb.h" |
12 #include "blimp/common/proto/render_widget.pb.h" | 12 #include "blimp/common/proto/render_widget.pb.h" |
13 #include "content/public/browser/render_widget_host.h" | 13 #include "content/public/browser/render_widget_host.h" |
14 #include "net/base/net_errors.h" | 14 #include "net/base/net_errors.h" |
15 #include "third_party/WebKit/public/web/WebInputEvent.h" | 15 #include "third_party/WebKit/public/web/WebInputEvent.h" |
16 | 16 |
17 namespace blimp { | 17 namespace blimp { |
18 | 18 |
19 EngineRenderWidgetFeature::EngineRenderWidgetFeature() {} | 19 EngineRenderWidgetFeature::EngineRenderWidgetFeature( |
20 EngineSettingsFeature* settings) | |
21 : settings_feature_(settings) { | |
22 DCHECK(settings_feature_); | |
23 settings_feature_->AddObserver(this); | |
haibinlu
2016/03/21 18:25:22
Shall we avoid dependency between features?
Discu
Khushal
2016/03/22 04:11:42
Sounds like a great idea. I looked at the code aga
| |
24 } | |
20 | 25 |
21 EngineRenderWidgetFeature::~EngineRenderWidgetFeature() {} | 26 EngineRenderWidgetFeature::~EngineRenderWidgetFeature() { |
27 DCHECK(settings_feature_); | |
28 settings_feature_->RemoveObserver(this); | |
29 } | |
22 | 30 |
23 void EngineRenderWidgetFeature::set_render_widget_message_sender( | 31 void EngineRenderWidgetFeature::set_render_widget_message_sender( |
24 scoped_ptr<BlimpMessageProcessor> message_processor) { | 32 scoped_ptr<BlimpMessageProcessor> message_processor) { |
25 DCHECK(message_processor); | 33 DCHECK(message_processor); |
26 render_widget_message_sender_ = std::move(message_processor); | 34 render_widget_message_sender_ = std::move(message_processor); |
27 } | 35 } |
28 | 36 |
29 void EngineRenderWidgetFeature::set_input_message_sender( | 37 void EngineRenderWidgetFeature::set_input_message_sender( |
30 scoped_ptr<BlimpMessageProcessor> message_processor) { | 38 scoped_ptr<BlimpMessageProcessor> message_processor) { |
31 DCHECK(message_processor); | 39 DCHECK(message_processor); |
32 input_message_sender_ = std::move(message_processor); | 40 input_message_sender_ = std::move(message_processor); |
33 } | 41 } |
34 | 42 |
35 void EngineRenderWidgetFeature::set_compositor_message_sender( | 43 void EngineRenderWidgetFeature::set_compositor_message_sender( |
36 scoped_ptr<BlimpMessageProcessor> message_processor) { | 44 scoped_ptr<BlimpMessageProcessor> message_processor) { |
37 DCHECK(message_processor); | 45 DCHECK(message_processor); |
38 compositor_message_sender_ = std::move(message_processor); | 46 compositor_message_sender_ = std::move(message_processor); |
39 } | 47 } |
40 | 48 |
41 void EngineRenderWidgetFeature::OnRenderWidgetCreated( | 49 void EngineRenderWidgetFeature::OnRenderWidgetCreated( |
42 const int tab_id, | 50 const int tab_id, |
43 content::RenderWidgetHost* render_widget_host) { | 51 content::RenderWidgetHost* render_widget_host) { |
44 DCHECK(render_widget_host); | 52 DCHECK(render_widget_host); |
45 | 53 |
54 content::RenderViewHost* render_view_host = | |
55 content::RenderViewHost::From(render_widget_host); | |
56 if (render_view_host) | |
57 settings_feature_->UpdateWebkitPreferences(render_view_host); | |
58 | |
46 int render_widget_id = AddRenderWidget(tab_id, render_widget_host); | 59 int render_widget_id = AddRenderWidget(tab_id, render_widget_host); |
47 DCHECK_GT(render_widget_id, 0); | 60 DCHECK_GT(render_widget_id, 0); |
48 | 61 |
49 RenderWidgetMessage* render_widget_message; | 62 RenderWidgetMessage* render_widget_message; |
50 scoped_ptr<BlimpMessage> blimp_message = | 63 scoped_ptr<BlimpMessage> blimp_message = |
51 CreateBlimpMessage(&render_widget_message, tab_id); | 64 CreateBlimpMessage(&render_widget_message, tab_id); |
52 render_widget_message->set_type(RenderWidgetMessage::CREATED); | 65 render_widget_message->set_type(RenderWidgetMessage::CREATED); |
53 render_widget_message->set_render_widget_id(render_widget_id); | 66 render_widget_message->set_render_widget_id(render_widget_id); |
54 | 67 |
55 render_widget_message_sender_->ProcessMessage(std::move(blimp_message), | 68 render_widget_message_sender_->ProcessMessage(std::move(blimp_message), |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
163 delegate->OnCompositorMessageReceived(render_widget_host, payload); | 176 delegate->OnCompositorMessageReceived(render_widget_host, payload); |
164 } | 177 } |
165 break; | 178 break; |
166 default: | 179 default: |
167 NOTREACHED(); | 180 NOTREACHED(); |
168 } | 181 } |
169 | 182 |
170 callback.Run(net::OK); | 183 callback.Run(net::OK); |
171 } | 184 } |
172 | 185 |
186 void EngineRenderWidgetFeature::OnWebPreferencesChanged() { | |
187 for (TabMap::iterator tab_it = tabs_.begin(); tab_it != tabs_.end(); | |
188 tab_it++) { | |
189 RenderWidgetMaps render_widget_maps = tab_it->second; | |
190 RenderWidgetToIdMap render_widget_to_id = render_widget_maps.first; | |
191 for (RenderWidgetToIdMap::iterator it = render_widget_to_id.begin(); | |
192 it != render_widget_to_id.end(); it++) { | |
193 content::RenderWidgetHost* render_widget_host = it->first; | |
194 content::RenderViewHost* render_view_host = | |
195 content::RenderViewHost::From(render_widget_host); | |
196 if (render_view_host) | |
197 settings_feature_->UpdateWebkitPreferences(render_view_host); | |
198 } | |
199 } | |
200 } | |
201 | |
173 EngineRenderWidgetFeature::RenderWidgetMessageDelegate* | 202 EngineRenderWidgetFeature::RenderWidgetMessageDelegate* |
174 EngineRenderWidgetFeature::FindDelegate(const int tab_id) { | 203 EngineRenderWidgetFeature::FindDelegate(const int tab_id) { |
175 DelegateMap::const_iterator it = delegates_.find(tab_id); | 204 DelegateMap::const_iterator it = delegates_.find(tab_id); |
176 if (it != delegates_.end()) | 205 if (it != delegates_.end()) |
177 return it->second; | 206 return it->second; |
178 return nullptr; | 207 return nullptr; |
179 } | 208 } |
180 | 209 |
181 int EngineRenderWidgetFeature::AddRenderWidget( | 210 int EngineRenderWidgetFeature::AddRenderWidget( |
182 const int tab_id, | 211 const int tab_id, |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
261 | 290 |
262 IdToRenderWidgetMap::const_iterator widget_id_it = | 291 IdToRenderWidgetMap::const_iterator widget_id_it = |
263 id_to_render_widget->find(render_widget_id); | 292 id_to_render_widget->find(render_widget_id); |
264 if (widget_id_it == id_to_render_widget->end()) | 293 if (widget_id_it == id_to_render_widget->end()) |
265 return nullptr; | 294 return nullptr; |
266 | 295 |
267 return widget_id_it->second; | 296 return widget_id_it->second; |
268 } | 297 } |
269 | 298 |
270 } // namespace blimp | 299 } // namespace blimp |
OLD | NEW |