Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Side by Side Diff: blimp/client/session/render_widget_feature.cc

Issue 1636163002: Restructure contents of blimp/client. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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.
4
5 #include "blimp/client/session/render_widget_feature.h"
6
7 #include "base/numerics/safe_conversions.h"
8 #include "blimp/common/create_blimp_message.h"
9 #include "blimp/common/proto/blimp_message.pb.h"
10 #include "blimp/common/proto/compositor.pb.h"
11 #include "blimp/common/proto/input.pb.h"
12 #include "blimp/common/proto/render_widget.pb.h"
13 #include "cc/proto/compositor_message.pb.h"
14 #include "net/base/net_errors.h"
15
16 namespace blimp {
17 namespace client {
18
19 RenderWidgetFeature::RenderWidgetFeature() {}
20
21 RenderWidgetFeature::~RenderWidgetFeature() {}
22
23 void RenderWidgetFeature::set_outgoing_input_message_processor(
24 scoped_ptr<BlimpMessageProcessor> processor) {
25 outgoing_input_message_processor_ = std::move(processor);
26 }
27
28 void RenderWidgetFeature::set_outgoing_compositor_message_processor(
29 scoped_ptr<BlimpMessageProcessor> processor) {
30 outgoing_compositor_message_processor_ = std::move(processor);
31 }
32
33 void RenderWidgetFeature::SendInputEvent(const int tab_id,
34 const blink::WebInputEvent& event) {
35 scoped_ptr<BlimpMessage> blimp_message =
36 input_message_generator_.GenerateMessage(event);
37
38 // Don't send unsupported WebInputEvents.
39 if (!blimp_message)
40 return;
41
42 blimp_message->set_target_tab_id(tab_id);
43 blimp_message->mutable_input()->set_render_widget_id(
44 GetRenderWidgetId(tab_id));
45
46 outgoing_input_message_processor_->ProcessMessage(std::move(blimp_message),
47 net::CompletionCallback());
48 }
49
50 void RenderWidgetFeature::SendCompositorMessage(
51 const int tab_id,
52 const cc::proto::CompositorMessage& message) {
53 CompositorMessage* compositor_message;
54 scoped_ptr<BlimpMessage> blimp_message =
55 CreateBlimpMessage(&compositor_message, tab_id);
56
57 uint32_t render_widget_id = GetRenderWidgetId(tab_id);
58 DCHECK_LT(0U, render_widget_id);
59 compositor_message->set_render_widget_id(render_widget_id);
60 compositor_message->mutable_payload()->resize(
61 base::checked_cast<size_t>(message.ByteSize()));
62 if (message.SerializeToString(compositor_message->mutable_payload())) {
63 outgoing_compositor_message_processor_->ProcessMessage(
64 std::move(blimp_message), net::CompletionCallback());
65 } else {
66 LOG(ERROR) << "Unable to serialize compositor proto.";
67 }
68 }
69
70 void RenderWidgetFeature::SetDelegate(const int tab_id,
71 RenderWidgetFeatureDelegate* delegate) {
72 DCHECK(!FindDelegate(tab_id));
73 delegates_[tab_id] = delegate;
74 }
75
76 void RenderWidgetFeature::RemoveDelegate(const int tab_id) {
77 DelegateMap::iterator it = delegates_.find(tab_id);
78 if (it != delegates_.end())
79 delegates_.erase(it);
80 }
81
82 void RenderWidgetFeature::ProcessMessage(
83 scoped_ptr<BlimpMessage> message,
84 const net::CompletionCallback& callback) {
85 DCHECK(!callback.is_null());
86 DCHECK(message->type() == BlimpMessage::RENDER_WIDGET ||
87 message->type() == BlimpMessage::COMPOSITOR);
88
89 int target_tab_id = message->target_tab_id();
90 RenderWidgetFeatureDelegate* delegate = FindDelegate(target_tab_id);
91 DCHECK(delegate) << "RenderWidgetFeatureDelegate not found for "
92 << target_tab_id;
93
94 switch (message->type()) {
95 case BlimpMessage::RENDER_WIDGET:
96 if (message->render_widget().type() == RenderWidgetMessage::INITIALIZE) {
97 render_widget_ids_[target_tab_id] =
98 message->render_widget().render_widget_id();
99 delegate->OnRenderWidgetInitialized();
100 }
101 break;
102 case BlimpMessage::COMPOSITOR: {
103 DCHECK_EQ(message->compositor().render_widget_id(),
104 GetRenderWidgetId(target_tab_id));
105 scoped_ptr<cc::proto::CompositorMessage> payload(
106 new cc::proto::CompositorMessage);
107 if (payload->ParseFromString(message->compositor().payload())) {
108 delegate->OnCompositorMessageReceived(std::move(payload));
109 }
110 } break;
111 default:
112 NOTIMPLEMENTED();
113 }
114
115 callback.Run(net::OK);
116 }
117
118 RenderWidgetFeature::RenderWidgetFeatureDelegate*
119 RenderWidgetFeature::FindDelegate(const int tab_id) {
120 DelegateMap::const_iterator it = delegates_.find(tab_id);
121 if (it != delegates_.end())
122 return it->second;
123 return nullptr;
124 }
125
126 uint32_t RenderWidgetFeature::GetRenderWidgetId(const int tab_id) {
127 RenderWidgetIdMap::const_iterator it = render_widget_ids_.find(tab_id);
128 if (it != render_widget_ids_.end())
129 return it->second;
130 return 0U;
131 }
132
133 } // namespace client
134 } // namespace blimp
OLDNEW
« no previous file with comments | « blimp/client/session/render_widget_feature.h ('k') | blimp/client/session/render_widget_feature_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698