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

Side by Side Diff: content/browser/device_orientation/orientation_message_filter.cc

Issue 10755002: Refactors DeviceOrientation to make it more extensible (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Moves construction of DeviceData objects out of ProviderImpl Created 8 years, 5 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/device_orientation/orientation_message_filter.h" 5 #include "content/browser/device_orientation/orientation_message_filter.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "content/browser/device_orientation/orientation.h" 8 #include "content/browser/device_orientation/orientation.h"
9 #include "content/browser/device_orientation/provider.h" 9 #include "content/browser/device_orientation/provider.h"
10 #include "content/browser/renderer_host/render_view_host_impl.h" 10 #include "content/browser/renderer_host/render_view_host_impl.h"
(...skipping 11 matching lines...) Expand all
22 } 22 }
23 23
24 class OrientationMessageFilter::ObserverDelegate 24 class OrientationMessageFilter::ObserverDelegate
25 : public base::RefCounted<ObserverDelegate>, public Provider::Observer { 25 : public base::RefCounted<ObserverDelegate>, public Provider::Observer {
26 public: 26 public:
27 // Create ObserverDelegate that observes provider and forwards updates to 27 // Create ObserverDelegate that observes provider and forwards updates to
28 // render_view_id in process_id. 28 // render_view_id in process_id.
29 // Will stop observing provider when destructed. 29 // Will stop observing provider when destructed.
30 ObserverDelegate(Provider* provider, 30 ObserverDelegate(Provider* provider,
31 int render_view_id, 31 int render_view_id,
32 IPC::Sender* sender); 32 IPC::Sender* sender,
33 DeviceData::DeviceDataType device_data_type);
33 34
34 // From Provider::Observer. 35 // From Provider::Observer.
35 virtual void OnOrientationUpdate(const Orientation& orientation); 36 virtual void OnDeviceDataUpdate(const DeviceData* device_data);
36 37
37 private: 38 private:
38 friend class base::RefCounted<ObserverDelegate>; 39 friend class base::RefCounted<ObserverDelegate>;
39 virtual ~ObserverDelegate(); 40 virtual ~ObserverDelegate();
40 41
41 scoped_refptr<Provider> provider_; 42 scoped_refptr<Provider> provider_;
42 int render_view_id_; 43 int render_view_id_;
43 IPC::Sender* sender_; // Weak pointer. 44 IPC::Sender* sender_; // Weak pointer.
44 45
45 DISALLOW_COPY_AND_ASSIGN(ObserverDelegate); 46 DISALLOW_COPY_AND_ASSIGN(ObserverDelegate);
46 }; 47 };
47 48
48 OrientationMessageFilter::ObserverDelegate::ObserverDelegate(Provider* provider, 49 OrientationMessageFilter::ObserverDelegate::ObserverDelegate(Provider* provider,
49 int render_view_id, 50 int render_view_id, IPC::Sender* sender,
50 IPC::Sender* sender) 51 DeviceData::DeviceDataType device_data_type)
51 : provider_(provider), 52 : provider_(provider),
bulach 2012/07/12 10:43:27 nit: I think the initializer list needs to be inde
aousterh 2012/07/12 17:13:57 Done.
52 render_view_id_(render_view_id), 53 render_view_id_(render_view_id),
53 sender_(sender) { 54 sender_(sender) {
54 provider_->AddObserver(this); 55 provider_->AddObserver(this);
56 device_data_type_ = device_data_type;
55 } 57 }
56 58
57 OrientationMessageFilter::ObserverDelegate::~ObserverDelegate() { 59 OrientationMessageFilter::ObserverDelegate::~ObserverDelegate() {
58 provider_->RemoveObserver(this); 60 provider_->RemoveObserver(this);
59 } 61 }
60 62
61 void OrientationMessageFilter::ObserverDelegate::OnOrientationUpdate( 63 void OrientationMessageFilter::ObserverDelegate::OnDeviceDataUpdate(
62 const Orientation& orientation) { 64 const DeviceData* device_data) {
63 DeviceOrientationMsg_Updated_Params params; 65 DeviceOrientationMsg_Updated_Params params;
64 params.can_provide_alpha = orientation.can_provide_alpha(); 66
65 params.alpha = orientation.alpha(); 67 const Orientation* orientation = static_cast<const Orientation*>(device_data);
bulach 2012/07/12 10:43:27 hmm... I'm not a 100% of this suggestion, but here
aousterh 2012/07/12 17:13:57 Done.
66 params.can_provide_beta = orientation.can_provide_beta(); 68 const Orientation empty_orientation;
67 params.beta = orientation.beta(); 69 if (orientation == NULL)
68 params.can_provide_gamma = orientation.can_provide_gamma(); 70 orientation = &empty_orientation;
69 params.gamma = orientation.gamma(); 71
70 params.can_provide_absolute = orientation.can_provide_absolute(); 72 params.can_provide_alpha = orientation->can_provide_alpha();
71 params.absolute = orientation.absolute(); 73 params.alpha = orientation->alpha();
74 params.can_provide_beta = orientation->can_provide_beta();
75 params.beta = orientation->beta();
76 params.can_provide_gamma = orientation->can_provide_gamma();
77 params.gamma = orientation->gamma();
78 params.can_provide_absolute = orientation->can_provide_absolute();
79 params.absolute = orientation->absolute();
72 80
73 sender_->Send(new DeviceOrientationMsg_Updated(render_view_id_, params)); 81 sender_->Send(new DeviceOrientationMsg_Updated(render_view_id_, params));
74 } 82 }
75 83
76 bool OrientationMessageFilter::OnMessageReceived(const IPC::Message& message, 84 bool OrientationMessageFilter::OnMessageReceived(const IPC::Message& message,
77 bool* message_was_ok) { 85 bool* message_was_ok) {
78 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 86 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
79 bool handled = true; 87 bool handled = true;
80 IPC_BEGIN_MESSAGE_MAP_EX(OrientationMessageFilter, message, *message_was_ok) 88 IPC_BEGIN_MESSAGE_MAP_EX(OrientationMessageFilter, message, *message_was_ok)
81 IPC_MESSAGE_HANDLER(DeviceOrientationHostMsg_StartUpdating, OnStartUpdating) 89 IPC_MESSAGE_HANDLER(DeviceOrientationHostMsg_StartUpdating, OnStartUpdating)
82 IPC_MESSAGE_HANDLER(DeviceOrientationHostMsg_StopUpdating, OnStopUpdating) 90 IPC_MESSAGE_HANDLER(DeviceOrientationHostMsg_StopUpdating, OnStopUpdating)
83 IPC_MESSAGE_UNHANDLED(handled = false) 91 IPC_MESSAGE_UNHANDLED(handled = false)
84 IPC_END_MESSAGE_MAP() 92 IPC_END_MESSAGE_MAP()
85 return handled; 93 return handled;
86 } 94 }
87 95
88 void OrientationMessageFilter::OnStartUpdating(int render_view_id) { 96 void OrientationMessageFilter::OnStartUpdating(int render_view_id) {
89 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 97 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
90 98
91 if (!provider_) 99 if (!provider_)
92 provider_ = Provider::GetInstance(); 100 provider_ = Provider::GetInstance();
93 101
94 observers_map_[render_view_id] = new ObserverDelegate(provider_, 102 observers_map_[render_view_id] = new ObserverDelegate(provider_,
95 render_view_id, 103 render_view_id, this, DeviceData::kDeviceOrientationData);
96 this);
97 } 104 }
98 105
99 void OrientationMessageFilter::OnStopUpdating(int render_view_id) { 106 void OrientationMessageFilter::OnStopUpdating(int render_view_id) {
100 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 107 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
101 108
102 observers_map_.erase(render_view_id); 109 observers_map_.erase(render_view_id);
103 } 110 }
104 111
105 } // namespace device_orientation 112 } // namespace device_orientation
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698