Skip to content

Commit

Permalink
[Device Service] Port ScreenOrientationListener into Device Service.
Browse files Browse the repository at this point in the history
ScreenOrientationListener interface does not require ordering with
ScreenOrientation, so we can simply decouple it from //content to let it
being hosted in Device Service.

BUG=678545
TBR=sky@chromium.org

Review-Url: https://codereview.chromium.org/2745443002
Cr-Commit-Position: refs/heads/master@{#457021}
  • Loading branch information
leon.han authored and Commit bot committed Mar 15, 2017
1 parent fc59979 commit bb3acfe
Show file tree
Hide file tree
Showing 25 changed files with 239 additions and 151 deletions.
2 changes: 0 additions & 2 deletions content/browser/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -1816,8 +1816,6 @@ source_set("browser") {
"renderer_host/render_widget_host_view_android.h",
"screen_orientation/screen_orientation_delegate_android.cc",
"screen_orientation/screen_orientation_delegate_android.h",
"screen_orientation/screen_orientation_listener_android.cc",
"screen_orientation/screen_orientation_listener_android.h",
"web_contents/web_contents_android.cc",
"web_contents/web_contents_android.h",
"web_contents/web_contents_view_android.cc",
Expand Down
2 changes: 0 additions & 2 deletions content/browser/renderer_host/render_process_host_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,6 @@
#include "ui/native_theme/native_theme_switches.h"

#if defined(OS_ANDROID)
#include "content/browser/screen_orientation/screen_orientation_listener_android.h"
#include "content/public/browser/android/java_interfaces.h"
#include "ipc/ipc_sync_channel.h"
#include "media/audio/android/audio_manager_android.h"
Expand Down Expand Up @@ -1188,7 +1187,6 @@ void RenderProcessHostImpl::CreateMessageFilters() {
AddFilter(new HistogramMessageFilter());
AddFilter(new MemoryMessageFilter(this));
#if defined(OS_ANDROID)
AddFilter(new ScreenOrientationListenerAndroid());
synchronous_compositor_filter_ =
new SynchronousCompositorBrowserFilter(GetID());
AddFilter(synchronous_compositor_filter_.get());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,6 @@ ScreenOrientationDelegateAndroid::~ScreenOrientationDelegateAndroid() {
ScreenOrientationProvider::SetDelegate(nullptr);
}

// static
void ScreenOrientationDelegateAndroid::StartAccurateListening() {
Java_ScreenOrientationProvider_startAccurateListening(
base::android::AttachCurrentThread());
}

// static
void ScreenOrientationDelegateAndroid::StopAccurateListening() {
Java_ScreenOrientationProvider_stopAccurateListening(
base::android::AttachCurrentThread());
}

bool ScreenOrientationDelegateAndroid::FullScreenRequired(
WebContents* web_contents) {
ContentViewCoreImpl* cvc =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,6 @@ class ScreenOrientationDelegateAndroid : public ScreenOrientationDelegate {
ScreenOrientationDelegateAndroid();
~ScreenOrientationDelegateAndroid() override;

// Ask the ScreenOrientationListener (Java) to start accurately listening to
// the screen orientation. It keep track of the number of start request if it
// is already running an accurate listening.
static void StartAccurateListening();

// Ask the ScreenOrientationListener (Java) to stop accurately listening to
// the screen orientation. It will actually stop only if the number of stop
// requests matches the number of start requests.
static void StopAccurateListening();

// ScreenOrientationDelegate:
bool FullScreenRequired(WebContents* web_contents) override;
void Lock(WebContents* web_contents,
Expand Down

This file was deleted.

This file was deleted.

3 changes: 2 additions & 1 deletion content/browser/service_manager/service_manager_context.cc
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,8 @@ ServiceManagerContext::ServiceManagerContext() {
ServiceInfo device_info;
device_info.factory =
base::Bind(&device::CreateDeviceService,
BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE));
BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE),
BrowserThread::GetTaskRunnerForThread(BrowserThread::IO));
device_info.task_runner = base::ThreadTaskRunnerHandle::Get();
packaged_services_connection_->AddEmbeddedService(device::mojom::kServiceName,
device_info);
Expand Down
2 changes: 0 additions & 2 deletions content/common/screen_orientation_messages.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
#undef IPC_MESSAGE_EXPORT
#define IPC_MESSAGE_EXPORT CONTENT_EXPORT

#define IPC_MESSAGE_START ScreenOrientationMsgStart

// Only used by content/common/manifest_manager_messages.h.
IPC_ENUM_TRAITS_MIN_MAX_VALUE(blink::WebScreenOrientationLockType,
blink::WebScreenOrientationLockDefault,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import android.view.Surface;

import org.chromium.base.Log;
import org.chromium.base.ThreadUtils;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.content_public.common.ScreenOrientationConstants;
Expand Down Expand Up @@ -124,26 +123,6 @@ static void unlockOrientation(@Nullable WindowAndroid window) {
}
}

@CalledByNative
static void startAccurateListening() {
ThreadUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
DisplayAndroid.startAccurateListening();
}
});
}

@CalledByNative
static void stopAccurateListening() {
ThreadUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
DisplayAndroid.stopAccurateListening();
}
});
}

private ScreenOrientationProvider() {
}
}
1 change: 1 addition & 0 deletions content/public/app/mojo/content_renderer_manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"content_browser": [ "renderer" ],
"device": [
"device:power_monitor",
"device:screen_orientation",
"device:time_zone_monitor"
],
"ui": [
Expand Down
1 change: 1 addition & 0 deletions content/renderer/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,7 @@ target(link_target_type, "renderer") {
"//ppapi/features",
"//printing/features",
"//sandbox",
"//services/device/public/interfaces",
"//services/service_manager/public/cpp",
"//services/service_manager/public/interfaces",
"//services/ui/public/cpp/gpu",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@

#include "content/renderer/screen_orientation/screen_orientation_observer.h"

#include "content/public/common/service_manager_connection.h"
#include "content/renderer/render_thread_impl.h"
#include "services/device/public/interfaces/constants.mojom.h"
#include "services/service_manager/public/cpp/connector.h"

namespace content {

Expand Down Expand Up @@ -33,8 +36,10 @@ void ScreenOrientationObserver::SendStopMessage() {
device::mojom::ScreenOrientationListener*
ScreenOrientationObserver::GetScreenOrientationListener() {
if (!listener_) {
RenderThreadImpl::current()->GetChannel()->GetRemoteAssociatedInterface(
&listener_);
RenderThreadImpl::current()
->GetServiceManagerConnection()
->GetConnector()
->BindInterface(device::mojom::kServiceName, &listener_);
}
return listener_.get();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class ScreenOrientationObserver
private:
device::mojom::ScreenOrientationListener* GetScreenOrientationListener();

device::mojom::ScreenOrientationListenerAssociatedPtr listener_;
device::mojom::ScreenOrientationListenerPtr listener_;
};

}; // namespace content
1 change: 0 additions & 1 deletion ipc/ipc_message_start.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ enum IPCMessageStart {
EmbeddedWorkerContextMsgStart,
CastMsgStart,
CdmMsgStart,
ScreenOrientationMsgStart,
MediaStreamTrackMetricsHostMsgStart,
ChromeExtensionMsgStart,
PushMessagingMsgStart,
Expand Down
7 changes: 6 additions & 1 deletion services/device/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ source_set("lib") {
"//base",
"//services/device/fingerprint",
"//services/device/power_monitor",
"//services/device/screen_orientation",
"//services/device/time_zone_monitor",
"//services/service_manager/public/cpp",
]
Expand Down Expand Up @@ -61,9 +62,13 @@ service_manifest("manifest") {

if (is_android) {
android_library("java") {
java_files = [ "time_zone_monitor/android/java/src/org/chromium/device/time_zone_monitor/TimeZoneMonitor.java" ]
java_files = [
"screen_orientation/android/java/src/org/chromium/device/screen_orientation/ScreenOrientationListener.java",
"time_zone_monitor/android/java/src/org/chromium/device/time_zone_monitor/TimeZoneMonitor.java",
]
deps = [
"//base:base_java",
"//ui/android:ui_java",
]
}
}
29 changes: 24 additions & 5 deletions services/device/device_service.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "base/bind.h"
#include "base/memory/ptr_util.h"
#include "base/memory/weak_ptr.h"
#include "base/single_thread_task_runner.h"
#include "base/threading/thread_task_runner_handle.h"
#include "services/device/fingerprint/fingerprint.h"
#include "services/device/power_monitor/power_monitor_message_broadcaster.h"
Expand All @@ -16,25 +17,30 @@

#if defined(OS_ANDROID)
#include "services/device/android/register_jni.h"
#include "services/device/screen_orientation/screen_orientation_listener_android.h"
#endif

namespace device {

std::unique_ptr<service_manager::Service> CreateDeviceService(
scoped_refptr<base::SingleThreadTaskRunner> file_task_runner) {
scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner) {
#if defined(OS_ANDROID)
if (!EnsureJniRegistered()) {
DLOG(ERROR) << "Failed to register JNI for Device Service";
return nullptr;
}
#endif

return base::MakeUnique<DeviceService>(std::move(file_task_runner));
return base::MakeUnique<DeviceService>(std::move(file_task_runner),
std::move(io_task_runner));
}

DeviceService::DeviceService(
scoped_refptr<base::SingleThreadTaskRunner> file_task_runner)
: file_task_runner_(std::move(file_task_runner)) {}
scoped_refptr<base::SingleThreadTaskRunner> file_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner)
: file_task_runner_(std::move(file_task_runner)),
io_task_runner_(std::move(io_task_runner)) {}

DeviceService::~DeviceService() {}

Expand All @@ -44,7 +50,9 @@ bool DeviceService::OnConnect(const service_manager::ServiceInfo& remote_info,
service_manager::InterfaceRegistry* registry) {
registry->AddInterface<mojom::Fingerprint>(this);
registry->AddInterface<mojom::PowerMonitor>(this);
registry->AddInterface<mojom::ScreenOrientationListener>(this);
registry->AddInterface<mojom::TimeZoneMonitor>(this);

return true;
}

Expand All @@ -62,10 +70,21 @@ void DeviceService::Create(const service_manager::Identity& remote_identity,
power_monitor_message_broadcaster_->Bind(std::move(request));
}

void DeviceService::Create(const service_manager::Identity& remote_identity,
mojom::ScreenOrientationListenerRequest request) {
#if defined(OS_ANDROID)
if (io_task_runner_) {
io_task_runner_->PostTask(
FROM_HERE, base::Bind(&ScreenOrientationListenerAndroid::Create,
base::Passed(&request)));
}
#endif
}

void DeviceService::Create(const service_manager::Identity& remote_identity,
mojom::TimeZoneMonitorRequest request) {
if (!time_zone_monitor_)
time_zone_monitor_ = device::TimeZoneMonitor::Create(file_task_runner_);
time_zone_monitor_ = TimeZoneMonitor::Create(file_task_runner_);
time_zone_monitor_->Bind(std::move(request));
}

Expand Down
Loading

0 comments on commit bb3acfe

Please sign in to comment.