Skip to content

Commit

Permalink
Fold NativeViewport application into ViewManager application.
Browse files Browse the repository at this point in the history
R=sky@chromium.org
BUG=

Review URL: https://codereview.chromium.org/1123153006

Cr-Commit-Position: refs/heads/master@{#331010}
  • Loading branch information
ben authored and Commit bot committed May 21, 2015
1 parent fe9a066 commit 5fdef63
Show file tree
Hide file tree
Showing 20 changed files with 210 additions and 233 deletions.
2 changes: 1 addition & 1 deletion components/html_viewer/html_document.cc
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ void HTMLDocument::initializeLayerTreeView() {
ServiceProviderPtr gpu_service_provider;
// TODO(jamesr): Should be mojo:gpu_service
mojo::URLRequestPtr request2(mojo::URLRequest::New());
request2->url = mojo::String::From("mojo:native_viewport_service");
request2->url = mojo::String::From("mojo:view_manager");
shell_->ConnectToApplication(request2.Pass(),
GetProxy(&gpu_service_provider), nullptr);
mojo::GpuPtr gpu_service;
Expand Down
71 changes: 60 additions & 11 deletions components/view_manager/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,67 @@ import("//build/config/ui.gni")
import("//testing/test.gni")
import("//third_party/mojo/src/mojo/public/mojo_application.gni")

mojo_native_application("view_manager") {
sources = [
"main.cc",
]
if (is_android) {
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")

group("view_manager") {
deps = [
":jni_headers",
":loader",
":view_manager_lib",
":view_manager_java",
"native_viewport",
]
}

deps = [
":view_manager_lib",
"//base",
"//components/view_manager/public/interfaces",
"//mojo/application/public/cpp",
"//mojo/converters/geometry",
]
android_library("view_manager_java") {
java_files = [ "native_viewport/android/src/org/chromium/mojo/PlatformViewportAndroid.java" ]

deps = [
"//base:base_java",
]
}

generate_jni("jni_headers") {
sources = [
"native_viewport/android/src/org/chromium/mojo/PlatformViewportAndroid.java",
]

jni_package = "mojo"
}

source_set("loader") {
sources = [
"android_loader.cc",
"android_loader.h",
]

deps = [
"public/interfaces",
"//third_party/mojo/src/mojo/public/cpp/bindings",
]
}
} else {
mojo_native_application("view_manager") {
sources = [
"main.cc",
]

deps = [
":view_manager_lib",
"//base",
"//components/view_manager/public/interfaces",
"//components/view_manager/native_viewport",
"//mojo/application/public/cpp",
"//mojo/converters/geometry",
"//mojo/environment:chromium",
"//third_party/mojo/src/mojo/public/cpp/bindings:bindings",
"//ui/events",
"//ui/events/platform",
"//ui/gl",
]
}
}

source_set("view_manager_lib") {
Expand Down
2 changes: 2 additions & 0 deletions components/view_manager/DEPS
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
include_rules = [
"+cc",
"+components/gles2",
"+components/gpu",
"+components/native_viewport",
"+components/surfaces",
"+mojo/application",
"+mojo/common",
"+mojo/converters",
"+mojo/services/network/public",
"+mojo/shell",
"+third_party/mojo/src/mojo/public",
"+third_party/mojo_services",
"+ui",
Expand Down
23 changes: 23 additions & 0 deletions components/view_manager/android_loader.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/view_manager/android_loader.h"

#include "components/view_manager/view_manager_app.h"
#include "mojo/application/public/cpp/application_impl.h"

namespace view_manager {

AndroidLoader::AndroidLoader() {}
AndroidLoader::~AndroidLoader() {}

void AndroidLoader::Load(
const GURL& url,
mojo::InterfaceRequest<mojo::Application> application_request) {
DCHECK(application_request.is_pending());
app_.reset(new mojo::ApplicationImpl(new ViewManagerApp,
application_request.Pass()));
}

} // namespace view_manager
34 changes: 34 additions & 0 deletions components/view_manager/android_loader.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_VIEW_MANAGER_ANDROID_LOADER_H_
#define COMPONENTS_VIEW_MANAGER_ANDROID_LOADER_H_

#include "mojo/shell/application_loader.h"

namespace mojo {
class ApplicationImpl;
}

namespace view_manager {

class AndroidLoader : public mojo::shell::ApplicationLoader {
public:
AndroidLoader();
~AndroidLoader();

private:
// Overridden from mojo::shell::ApplicationLoader:
void Load(
const GURL& url,
mojo::InterfaceRequest<mojo::Application> application_request) override;

scoped_ptr<mojo::ApplicationImpl> app_;

DISALLOW_COPY_AND_ASSIGN(AndroidLoader);
};

} // namespace view_manager

#endif // COMPONENTS_VIEW_MANAGER_ANDROID_LOADER_H_
4 changes: 3 additions & 1 deletion components/view_manager/display_manager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,9 @@ void DefaultDisplayManager::Init(
mojo::NativeViewportEventDispatcherPtr event_dispatcher) {
connection_manager_ = connection_manager;
mojo::URLRequestPtr request(mojo::URLRequest::New());
request->url = mojo::String::From("mojo:native_viewport_service");
// TODO(beng): should not need to connect to ourselves, should just
// create the appropriate platform window directly.
request->url = mojo::String::From("mojo:view_manager");
app_impl_->ConnectToService(request.Pass(),
&native_viewport_);
native_viewport_.set_error_handler(this);
Expand Down
55 changes: 2 additions & 53 deletions components/view_manager/native_viewport/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -5,59 +5,8 @@
import("//build/config/ui.gni")
import("//third_party/mojo/src/mojo/public/mojo_application.gni")

if (is_android) {
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")

group("native_viewport") {
deps = [
":lib",
":native_viewport_java",
":jni_headers",
]
}

android_library("native_viewport_java") {
java_files =
[ "android/src/org/chromium/mojo/PlatformViewportAndroid.java" ]

deps = [
"//base:base_java",
]
}

generate_jni("jni_headers") {
sources = [
"android/src/org/chromium/mojo/PlatformViewportAndroid.java",
]

jni_package = "mojo"
}
} else {
mojo_native_application("native_viewport") {
output_name = "native_viewport_service"
sources = [
"main.cc",
]
deps = [
":lib",
"//base",
"//components/gles2",
"//components/view_manager/public/cpp",
"//components/view_manager/public/interfaces",
"//mojo/application/public/cpp",
"//third_party/mojo/src/mojo/public/cpp/bindings:bindings",
"//ui/events",
"//ui/events/platform",
"//ui/gl",
]
}
}

source_set("lib") {
source_set("native_viewport") {
sources = [
"native_viewport_application_delegate.cc",
"native_viewport_application_delegate.h",
"native_viewport_impl.cc",
"native_viewport_impl.h",
"onscreen_context_provider.cc",
Expand Down Expand Up @@ -95,7 +44,7 @@ source_set("lib") {
]

if (is_android) {
deps += [ ":jni_headers" ]
deps += [ "//components/view_manager:jni_headers" ]
}

if (use_x11) {
Expand Down
15 changes: 0 additions & 15 deletions components/view_manager/native_viewport/main.cc

This file was deleted.

67 changes: 52 additions & 15 deletions components/view_manager/view_manager_app.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,52 +4,70 @@

#include "components/view_manager/view_manager_app.h"

#include "base/command_line.h"
#include "components/view_manager/client_connection.h"
#include "components/view_manager/connection_manager.h"
#include "components/view_manager/display_manager.h"
#include "components/view_manager/native_viewport/native_viewport_impl.h"
#include "components/view_manager/public/cpp/args.h"
#include "components/view_manager/view_manager_service_impl.h"
#include "mojo/application/public/cpp/application_connection.h"
#include "mojo/application/public/cpp/application_impl.h"
#include "mojo/application/public/cpp/application_runner.h"
#include "mojo/common/tracing_impl.h"
#include "third_party/mojo/src/mojo/public/c/system/main.h"
#include "ui/events/event_switches.h"
#include "ui/events/platform/platform_event_source.h"
#include "ui/gl/gl_surface.h"

using mojo::ApplicationConnection;
using mojo::ApplicationImpl;
using mojo::Gpu;
using mojo::InterfaceRequest;
using mojo::NativeViewport;
using mojo::ViewManagerRoot;
using mojo::ViewManagerService;

namespace view_manager {

ViewManagerApp::ViewManagerApp()
: app_impl_(nullptr), wm_app_connection_(nullptr) {
ViewManagerApp::ViewManagerApp() : app_impl_(nullptr) {
}

ViewManagerApp::~ViewManagerApp() {}

void ViewManagerApp::Initialize(ApplicationImpl* app) {
app_impl_ = app;
tracing_.Initialize(app);

scoped_ptr<DefaultDisplayManager> display_manager(new DefaultDisplayManager(
app_impl_, base::Bind(&ViewManagerApp::OnLostConnectionToWindowManager,
base::Unretained(this))));
connection_manager_.reset(
new ConnectionManager(this, display_manager.Pass()));

#if !defined(OS_ANDROID)
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
is_headless_ = command_line->HasSwitch(mojo::kUseHeadlessConfig);
if (!is_headless_) {
event_source_ = ui::PlatformEventSource::CreateDefault();
if (command_line->HasSwitch(mojo::kUseTestConfig))
gfx::GLSurface::InitializeOneOffForTests();
else
gfx::GLSurface::InitializeOneOff();
}
#endif
}

bool ViewManagerApp::ConfigureIncomingConnection(
ApplicationConnection* connection) {
if (connection_manager_.get()) {
VLOG(1) << "ViewManager allows only one window manager connection.";
return false;
}
wm_app_connection_ = connection;

// |connection| originates from the WindowManager. Let it connect directly
// to the ViewManager.
connection->AddService<ViewManagerService>(this);
connection->AddService<ViewManagerRoot>(this);
connection->AddService<NativeViewport>(this);
connection->AddService<Gpu>(this);

scoped_ptr<DefaultDisplayManager> display_manager(new DefaultDisplayManager(
app_impl_, base::Bind(&ViewManagerApp::OnLostConnectionToWindowManager,
base::Unretained(this))));
connection_manager_.reset(
new ConnectionManager(this, display_manager.Pass()));
return true;
}

Expand Down Expand Up @@ -90,8 +108,7 @@ ClientConnection* ViewManagerApp::CreateClientConnectionForEmbedAtView(

void ViewManagerApp::Create(ApplicationConnection* connection,
InterfaceRequest<ViewManagerService> request) {
if (connection_manager_->has_window_manager_client_connection() ||
connection != wm_app_connection_) {
if (connection_manager_->has_window_manager_client_connection()) {
VLOG(1) << "ViewManager interface requested more than once.";
return;
}
Expand All @@ -100,7 +117,7 @@ void ViewManagerApp::Create(ApplicationConnection* connection,
connection_manager_.get(), kInvalidConnectionId, std::string(),
connection->GetRemoteApplicationURL(), RootViewId()));
mojo::ViewManagerClientPtr client;
wm_app_connection_->ConnectToService(&client);
connection->ConnectToService(&client);
scoped_ptr<ClientConnection> client_connection(
new DefaultClientConnection(service.Pass(), connection_manager_.get(),
request.Pass(), client.Pass()));
Expand All @@ -122,6 +139,26 @@ void ViewManagerApp::Create(ApplicationConnection* connection,
view_manager_root_binding_->set_error_handler(this);
}

void ViewManagerApp::Create(
mojo::ApplicationConnection* connection,
mojo::InterfaceRequest<NativeViewport> request) {
if (!gpu_state_.get())
gpu_state_ = new gles2::GpuState;
new native_viewport::NativeViewportImpl(
is_headless_,
gpu_state_,
request.Pass(),
app_lifetime_helper_.CreateAppRefCount());
}

void ViewManagerApp::Create(
mojo::ApplicationConnection* connection,
mojo::InterfaceRequest<Gpu> request) {
if (!gpu_state_.get())
gpu_state_ = new gles2::GpuState;
new gles2::GpuImpl(request.Pass(), gpu_state_);
}

void ViewManagerApp::OnConnectionError() {
ApplicationImpl::Terminate();
}
Expand Down
Loading

0 comments on commit 5fdef63

Please sign in to comment.