16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/browser/screen_orientation/screen_orientation_message_filter_android.h"
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/browser/screen_orientation/screen_orientation_provider_android.h"
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/common/screen_orientation_messages.h"
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace content {
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)ScreenOrientationMessageFilterAndroid::ScreenOrientationMessageFilterAndroid()
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    : BrowserMessageFilter(ScreenOrientationMsgStart)
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    , listeners_count_(0) {
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)ScreenOrientationMessageFilterAndroid::~ScreenOrientationMessageFilterAndroid()
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles){
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (listeners_count_ > 0)
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ScreenOrientationProviderAndroid::StopAccurateListening();
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)bool ScreenOrientationMessageFilterAndroid::OnMessageReceived(
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    const IPC::Message& message) {
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bool handled = true;
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  IPC_BEGIN_MESSAGE_MAP(ScreenOrientationMessageFilterAndroid, message)
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ScreenOrientationHostMsg_StartListening,
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                        OnStartListening)
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ScreenOrientationHostMsg_StopListening,
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                        OnStopListening)
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    IPC_MESSAGE_UNHANDLED(handled = false)
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  IPC_END_MESSAGE_MAP()
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return handled;
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ScreenOrientationMessageFilterAndroid::OnStartListening() {
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ++listeners_count_;
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (listeners_count_ == 1)
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ScreenOrientationProviderAndroid::StartAccurateListening();
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void ScreenOrientationMessageFilterAndroid::OnStopListening() {
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DCHECK(listeners_count_ > 0);
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  --listeners_count_;
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (listeners_count_ == 0)
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ScreenOrientationProviderAndroid::StopAccurateListening();
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace content
50