Skip to content

Commit

Permalink
Onion Soupify MessagePort
Browse files Browse the repository at this point in the history
This involves moving content::MessagePort to blink::MessagePortChannel
(in WebKit/common), and getting rid of WebMessagePortChannel.

Bug: 769835
Change-Id: I91a22c84b11c67afe720c19066fa84cb9fb4fc7b
Reviewed-on: https://chromium-review.googlesource.com/596782
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Reviewed-by: Jeremy Roman <jbroman@chromium.org>
Commit-Queue: Marijn Kruisselbrink <mek@chromium.org>
Cr-Commit-Position: refs/heads/master@{#505480}
  • Loading branch information
mkruisselbrink authored and Commit Bot committed Sep 30, 2017
1 parent 6a10844 commit 17c5e2f
Show file tree
Hide file tree
Showing 106 changed files with 541 additions and 897 deletions.
1 change: 1 addition & 0 deletions content/DEPS
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ include_rules = [
"+third_party/webrtc",
"+third_party/webrtc_overrides",
"+third_party/zlib/google",
"+third_party/WebKit/common",
"+third_party/WebKit/public",

"+ui/accelerated_widget_mac",
Expand Down
37 changes: 18 additions & 19 deletions content/browser/android/app_web_message_port.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
#include "content/browser/android/string_message_codec.h"
#include "jni/AppWebMessagePort_jni.h"

using blink::MessagePortChannel;

namespace content {

// static
Expand All @@ -24,10 +26,10 @@ void AppWebMessagePort::CreateAndBindToJavaObject(
}

// static
std::vector<MessagePort> AppWebMessagePort::UnwrapJavaArray(
std::vector<MessagePortChannel> AppWebMessagePort::UnwrapJavaArray(
JNIEnv* env,
const base::android::JavaRef<jobjectArray>& jports) {
std::vector<MessagePort> ports;
std::vector<MessagePortChannel> channels;
if (!jports.is_null()) {
jsize num_ports = env->GetArrayLength(jports.obj());
for (jsize i = 0; i < num_ports; ++i) {
Expand All @@ -39,19 +41,19 @@ std::vector<MessagePort> AppWebMessagePort::UnwrapJavaArray(
DCHECK(native_port != -1);
AppWebMessagePort* instance =
reinterpret_cast<AppWebMessagePort*>(native_port);
ports.push_back(instance->port_); // Transfers ownership.
channels.push_back(instance->channel_); // Transfers ownership.
delete instance;
}
}
return ports;
return channels;
}

void AppWebMessagePort::CloseMessagePort(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller) {
// Explicitly reset the port here to ensure that OnMessagesAvailable has
// finished before we destroy this.
port_ = MessagePort();
channel_ = MessagePortChannel();

delete this;
}
Expand All @@ -63,8 +65,8 @@ void AppWebMessagePort::PostMessage(
const base::android::JavaParamRef<jobjectArray>& jports) {
std::vector<uint8_t> encoded_message =
EncodeStringMessage(base::android::ConvertJavaStringToUTF16(jmessage));
port_.PostMessage(encoded_message.data(), encoded_message.size(),
UnwrapJavaArray(env, jports));
channel_.PostMessage(encoded_message.data(), encoded_message.size(),
UnwrapJavaArray(env, jports));
}

jboolean AppWebMessagePort::DispatchNextMessage(
Expand All @@ -80,8 +82,8 @@ jboolean AppWebMessagePort::DispatchNextMessage(
"<init>", "()V");

std::vector<uint8_t> encoded_message;
std::vector<MessagePort> ports;
if (!port_.GetMessage(&encoded_message, &ports))
std::vector<MessagePortChannel> channels;
if (!channel_.GetMessage(&encoded_message, &channels))
return false;

base::string16 message;
Expand All @@ -92,20 +94,20 @@ jboolean AppWebMessagePort::DispatchNextMessage(
base::android::ConvertUTF16ToJavaString(env, message);

base::android::ScopedJavaLocalRef<jobjectArray> jports;
if (ports.size() > 0) {
if (channels.size() > 0) {
jports = base::android::ScopedJavaLocalRef<jobjectArray>(
env, env->NewObjectArray(
ports.size(),
channels.size(),
org_chromium_content_browser_AppWebMessagePort_clazz(env),
nullptr));

// Instantiate the Java and C++ wrappers for the transferred ports.
for (size_t i = 0; i < ports.size(); ++i) {
for (size_t i = 0; i < channels.size(); ++i) {
base::android::ScopedJavaLocalRef<jobject> jport(
env, env->NewObject(
org_chromium_content_browser_AppWebMessagePort_clazz(env),
app_web_message_port_constructor));
CreateAndBindToJavaObject(env, ports[i].ReleaseHandle(), jport);
CreateAndBindToJavaObject(env, channels[i].ReleaseHandle(), jport);

env->SetObjectArrayElement(jports.obj(), i, jport.obj());
}
Expand All @@ -118,18 +120,15 @@ jboolean AppWebMessagePort::DispatchNextMessage(
void AppWebMessagePort::StartReceivingMessages(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller) {
port_.SetCallback(
base::Bind(&AppWebMessagePort::OnMessagesAvailable,
base::Unretained(this)));
channel_.SetCallback(base::Bind(&AppWebMessagePort::OnMessagesAvailable,
base::Unretained(this)));
}

AppWebMessagePort::AppWebMessagePort(
JNIEnv* env,
mojo::ScopedMessagePipeHandle handle,
const base::android::JavaRef<jobject>& jobject)
: port_(std::move(handle)),
java_ref_(env, jobject) {
}
: channel_(std::move(handle)), java_ref_(env, jobject) {}

AppWebMessagePort::~AppWebMessagePort() {
}
Expand Down
6 changes: 3 additions & 3 deletions content/browser/android/app_web_message_port.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#define CONTENT_BROWSER_ANDROID_APP_WEB_MESSAGE_PORT_H_

#include "base/android/jni_weak_ref.h"
#include "content/common/message_port.h"
#include "third_party/WebKit/common/message_port/message_port_channel.h"

namespace content {

Expand All @@ -17,7 +17,7 @@ class AppWebMessagePort {
mojo::ScopedMessagePipeHandle handle,
const base::android::JavaRef<jobject>& jobject);

static std::vector<MessagePort> UnwrapJavaArray(
static std::vector<blink::MessagePortChannel> UnwrapJavaArray(
JNIEnv* env,
const base::android::JavaRef<jobjectArray>& jports);

Expand Down Expand Up @@ -46,7 +46,7 @@ class AppWebMessagePort {

void OnMessagesAvailable();

MessagePort port_;
blink::MessagePortChannel channel_;
JavaObjectWeakGlobalRef java_ref_;

DISALLOW_COPY_AND_ASSIGN(AppWebMessagePort);
Expand Down
17 changes: 9 additions & 8 deletions content/browser/message_port_provider.cc
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,16 @@
#include "content/browser/android/app_web_message_port.h"
#endif

using blink::MessagePortChannel;

namespace content {
namespace {

void PostMessageToFrameInternal(
WebContents* web_contents,
const base::string16& source_origin,
const base::string16& target_origin,
const base::string16& data,
std::vector<MessagePort> ports) {
void PostMessageToFrameInternal(WebContents* web_contents,
const base::string16& source_origin,
const base::string16& target_origin,
const base::string16& data,
std::vector<MessagePortChannel> channels) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);

FrameMsg_PostMessage_Params params;
Expand All @@ -32,7 +33,7 @@ void PostMessageToFrameInternal(
params.source_routing_id = MSG_ROUTING_NONE;
params.source_origin = source_origin;
params.target_origin = target_origin;
params.message_ports = std::move(ports);
params.message_ports = std::move(channels);

RenderFrameHost* rfh = web_contents->GetMainFrame();
rfh->Send(new FrameMsg_PostMessageEvent(rfh->GetRoutingID(), params));
Expand All @@ -56,7 +57,7 @@ void MessagePortProvider::PostMessageToFrame(
const base::string16& target_origin,
const base::string16& data) {
PostMessageToFrameInternal(web_contents, source_origin, target_origin, data,
std::vector<MessagePort>());
std::vector<MessagePortChannel>());
}

#if defined(OS_ANDROID)
Expand Down
1 change: 0 additions & 1 deletion content/browser/message_port_provider_browsertest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
#include "base/macros.h"
#include "base/strings/utf_string_conversions.h"
#include "base/synchronization/waitable_event.h"
#include "content/common/message_port.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/message_port_provider.h"
#include "content/public/browser/web_contents.h"
Expand Down
13 changes: 7 additions & 6 deletions content/browser/service_worker/service_worker_dispatcher_host.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
#include "third_party/WebKit/public/platform/modules/serviceworker/service_worker_error_type.mojom.h"
#include "url/gurl.h"

using blink::MessagePortChannel;
using blink::WebServiceWorkerError;

namespace content {
Expand Down Expand Up @@ -634,7 +635,7 @@ void ServiceWorkerDispatcherHost::OnPostMessageToWorker(
int provider_id,
const base::string16& message,
const url::Origin& source_origin,
const std::vector<MessagePort>& sent_message_ports) {
const std::vector<MessagePortChannel>& sent_message_ports) {
TRACE_EVENT0("ServiceWorker",
"ServiceWorkerDispatcherHost::OnPostMessageToWorker");
if (!GetContext())
Expand Down Expand Up @@ -664,7 +665,7 @@ void ServiceWorkerDispatcherHost::DispatchExtendableMessageEvent(
scoped_refptr<ServiceWorkerVersion> worker,
const base::string16& message,
const url::Origin& source_origin,
const std::vector<MessagePort>& sent_message_ports,
const std::vector<MessagePortChannel>& sent_message_ports,
ServiceWorkerProviderHost* sender_provider_host,
const StatusCallback& callback) {
switch (sender_provider_host->provider_type()) {
Expand Down Expand Up @@ -763,7 +764,7 @@ void ServiceWorkerDispatcherHost::DispatchExtendableMessageEventInternal(
scoped_refptr<ServiceWorkerVersion> worker,
const base::string16& message,
const url::Origin& source_origin,
const std::vector<MessagePort>& sent_message_ports,
const std::vector<MessagePortChannel>& sent_message_ports,
const base::Optional<base::TimeDelta>& timeout,
const StatusCallback& callback,
const SourceInfo& source_info) {
Expand Down Expand Up @@ -800,7 +801,7 @@ void ServiceWorkerDispatcherHost::
scoped_refptr<ServiceWorkerVersion> worker,
const base::string16& message,
const url::Origin& source_origin,
const std::vector<MessagePort>& sent_message_ports,
const std::vector<MessagePortChannel>& sent_message_ports,
const ExtendableMessageEventSource& source,
const base::Optional<base::TimeDelta>& timeout,
const StatusCallback& callback) {
Expand All @@ -817,7 +818,7 @@ void ServiceWorkerDispatcherHost::
mojom::ExtendableMessageEventPtr event = mojom::ExtendableMessageEvent::New();
event->message = message;
event->source_origin = source_origin;
event->message_ports = MessagePort::ReleaseHandles(sent_message_ports);
event->message_ports = MessagePortChannel::ReleaseHandles(sent_message_ports);
event->source = source;

// Hide the client url if the client has a unique origin.
Expand All @@ -834,7 +835,7 @@ void ServiceWorkerDispatcherHost::

template <typename SourceInfo>
void ServiceWorkerDispatcherHost::DidFailToDispatchExtendableMessageEvent(
const std::vector<MessagePort>& sent_message_ports,
const std::vector<MessagePortChannel>& sent_message_ports,
const SourceInfo& source_info,
const StatusCallback& callback,
ServiceWorkerStatusCode status) {
Expand Down
15 changes: 9 additions & 6 deletions content/browser/service_worker/service_worker_dispatcher_host.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,16 @@
#include "mojo/public/cpp/bindings/strong_associated_binding_set.h"
#include "third_party/WebKit/public/platform/modules/serviceworker/service_worker_registration.mojom.h"

namespace blink {
class MessagePortChannel;
}

namespace url {
class Origin;
} // namespace url

namespace content {

class MessagePort;
class ResourceContext;
class ServiceWorkerContextCore;
class ServiceWorkerContextWrapper;
Expand Down Expand Up @@ -174,37 +177,37 @@ class CONTENT_EXPORT ServiceWorkerDispatcherHost
int provider_id,
const base::string16& message,
const url::Origin& source_origin,
const std::vector<MessagePort>& sent_message_ports);
const std::vector<blink::MessagePortChannel>& sent_message_ports);

void OnTerminateWorker(int handle_id);

void DispatchExtendableMessageEvent(
scoped_refptr<ServiceWorkerVersion> worker,
const base::string16& message,
const url::Origin& source_origin,
const std::vector<MessagePort>& sent_message_ports,
const std::vector<blink::MessagePortChannel>& sent_message_ports,
ServiceWorkerProviderHost* sender_provider_host,
const StatusCallback& callback);
template <typename SourceInfo>
void DispatchExtendableMessageEventInternal(
scoped_refptr<ServiceWorkerVersion> worker,
const base::string16& message,
const url::Origin& source_origin,
const std::vector<MessagePort>& sent_message_ports,
const std::vector<blink::MessagePortChannel>& sent_message_ports,
const base::Optional<base::TimeDelta>& timeout,
const StatusCallback& callback,
const SourceInfo& source_info);
void DispatchExtendableMessageEventAfterStartWorker(
scoped_refptr<ServiceWorkerVersion> worker,
const base::string16& message,
const url::Origin& source_origin,
const std::vector<MessagePort>& sent_message_ports,
const std::vector<blink::MessagePortChannel>& sent_message_ports,
const ExtendableMessageEventSource& source,
const base::Optional<base::TimeDelta>& timeout,
const StatusCallback& callback);
template <typename SourceInfo>
void DidFailToDispatchExtendableMessageEvent(
const std::vector<MessagePort>& sent_message_ports,
const std::vector<blink::MessagePortChannel>& sent_message_ports,
const SourceInfo& source_info,
const StatusCallback& callback,
ServiceWorkerStatusCode status);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/platform/modules/serviceworker/service_worker_registration.mojom.h"

using blink::MessagePortChannel;

namespace content {

namespace {
Expand All @@ -48,10 +50,10 @@ static void SaveStatusCallback(bool* called,
*out = status;
}

void SetUpDummyMessagePort(std::vector<MessagePort>* ports) {
void SetUpDummyMessagePort(std::vector<MessagePortChannel>* ports) {
// Let the other end of the pipe close.
mojo::MessagePipe pipe;
ports->push_back(MessagePort(std::move(pipe.handle0)));
ports->push_back(MessagePortChannel(std::move(pipe.handle0)));
}

struct RemoteProviderInfo {
Expand Down Expand Up @@ -346,7 +348,7 @@ class ServiceWorkerDispatcherHostTest : public testing::Test {
scoped_refptr<ServiceWorkerVersion> worker,
const base::string16& message,
const url::Origin& source_origin,
const std::vector<MessagePort>& sent_message_ports,
const std::vector<MessagePortChannel>& sent_message_ports,
ServiceWorkerProviderHost* sender_provider_host,
const ServiceWorkerDispatcherHost::StatusCallback& callback) {
dispatcher_host_->DispatchExtendableMessageEvent(
Expand Down Expand Up @@ -874,7 +876,7 @@ TEST_F(ServiceWorkerDispatcherHostTest, DispatchExtendableMessageEvent) {
EXPECT_EQ(base::TimeDelta::FromSeconds(6), remaining_time);

// Dispatch ExtendableMessageEvent.
std::vector<MessagePort> ports;
std::vector<MessagePortChannel> ports;
SetUpDummyMessagePort(&ports);
called = false;
status = SERVICE_WORKER_ERROR_MAX_VALUE;
Expand Down Expand Up @@ -902,7 +904,7 @@ TEST_F(ServiceWorkerDispatcherHostTest, DispatchExtendableMessageEvent_Fail) {

// Try to dispatch ExtendableMessageEvent. This should fail to start the
// worker and to dispatch the event.
std::vector<MessagePort> ports;
std::vector<MessagePortChannel> ports;
SetUpDummyMessagePort(&ports);
bool called = false;
ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -507,7 +507,7 @@ bool ServiceWorkerProviderHost::CanAssociateRegistration(
void ServiceWorkerProviderHost::PostMessageToClient(
ServiceWorkerVersion* version,
const base::string16& message,
const std::vector<MessagePort>& sent_message_ports) {
const std::vector<blink::MessagePortChannel>& sent_message_ports) {
if (!dispatcher_host_)
return;

Expand Down
Loading

0 comments on commit 17c5e2f

Please sign in to comment.