diff options
author | harkness <harkness@chromium.org> | 2016-01-27 11:26:43 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-27 19:27:48 +0000 |
commit | dd4d2b253d29963aacb80e3a0dea42061f1f47c4 (patch) | |
tree | 67d950477df4ded42f878cb39a4531617ca00bee /content/browser | |
parent | 891564febe894f4305c8df8876616ee8ef34a956 (diff) | |
download | chromium_src-dd4d2b253d29963aacb80e3a0dea42061f1f47c4.zip chromium_src-dd4d2b253d29963aacb80e3a0dea42061f1f47c4.tar.gz chromium_src-dd4d2b253d29963aacb80e3a0dea42061f1f47c4.tar.bz2 |
Update the PushEvent to have a nullable PushMessageData
The specification now allows a PushMessage to have valid non-empty data,
valid empty data, and null data. To support that, the content layer now uses
a PushEventPayload which can be null.
This also adds and updates relevant unit tests for each of the layers.
BUG=578036
Review URL: https://codereview.chromium.org/1636483002
Cr-Commit-Position: refs/heads/master@{#371839}
Diffstat (limited to 'content/browser')
6 files changed, 34 insertions, 24 deletions
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc index fc3f644..32681ae 100644 --- a/content/browser/browser_context.cc +++ b/content/browser/browser_context.cc @@ -255,11 +255,12 @@ void BrowserContext::DeliverPushMessage( BrowserContext* browser_context, const GURL& origin, int64_t service_worker_registration_id, - const std::string& data, + const PushEventPayload& payload, const base::Callback<void(PushDeliveryStatus)>& callback) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - PushMessagingRouter::DeliverMessage( - browser_context, origin, service_worker_registration_id, data, callback); + PushMessagingRouter::DeliverMessage(browser_context, origin, + service_worker_registration_id, payload, + callback); } // static diff --git a/content/browser/devtools/protocol/service_worker_handler.cc b/content/browser/devtools/protocol/service_worker_handler.cc index 5571421..d4842fa 100644 --- a/content/browser/devtools/protocol/service_worker_handler.cc +++ b/content/browser/devtools/protocol/service_worker_handler.cc @@ -23,6 +23,7 @@ #include "content/public/browser/render_process_host.h" #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" +#include "content/public/common/push_event_payload.h" #include "content/public/common/push_messaging_status.h" #include "url/gurl.h" @@ -437,9 +438,12 @@ Response ServiceWorkerHandler::DeliverPushMessage( int64_t id = 0; if (!base::StringToInt64(registration_id, &id)) return CreateInvalidVersionIdErrorResponse(); + PushEventPayload payload; + if (data.size() > 0) + payload.setData(data); BrowserContext::DeliverPushMessage( render_frame_host_->GetProcess()->GetBrowserContext(), GURL(origin), id, - data, base::Bind(&PushDeliveryNoOp)); + payload, base::Bind(&PushDeliveryNoOp)); return Response::OK(); } diff --git a/content/browser/push_messaging/push_messaging_router.cc b/content/browser/push_messaging/push_messaging_router.cc index 7b8deab..7bc469b 100644 --- a/content/browser/push_messaging/push_messaging_router.cc +++ b/content/browser/push_messaging/push_messaging_router.cc @@ -15,6 +15,7 @@ #include "content/public/browser/browser_context.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/storage_partition.h" +#include "content/public/common/push_event_payload.h" namespace content { @@ -36,7 +37,7 @@ void PushMessagingRouter::DeliverMessage( BrowserContext* browser_context, const GURL& origin, int64_t service_worker_registration_id, - const std::string& data, + const PushEventPayload& payload, const DeliverMessageCallback& deliver_message_callback) { DCHECK_CURRENTLY_ON(BrowserThread::UI); StoragePartition* partition = @@ -47,15 +48,15 @@ void PushMessagingRouter::DeliverMessage( BrowserThread::PostTask( BrowserThread::IO, FROM_HERE, base::Bind(&PushMessagingRouter::FindServiceWorkerRegistration, origin, - service_worker_registration_id, data, deliver_message_callback, - service_worker_context)); + service_worker_registration_id, payload, + deliver_message_callback, service_worker_context)); } // static void PushMessagingRouter::FindServiceWorkerRegistration( const GURL& origin, int64_t service_worker_registration_id, - const std::string& data, + const PushEventPayload& payload, const DeliverMessageCallback& deliver_message_callback, scoped_refptr<ServiceWorkerContextWrapper> service_worker_context) { DCHECK_CURRENTLY_ON(BrowserThread::IO); @@ -64,12 +65,12 @@ void PushMessagingRouter::FindServiceWorkerRegistration( service_worker_context->FindReadyRegistrationForId( service_worker_registration_id, origin, base::Bind(&PushMessagingRouter::FindServiceWorkerRegistrationCallback, - data, deliver_message_callback)); + payload, deliver_message_callback)); } // static void PushMessagingRouter::FindServiceWorkerRegistrationCallback( - const std::string& data, + const PushEventPayload& payload, const DeliverMessageCallback& deliver_message_callback, ServiceWorkerStatusCode service_worker_status, const scoped_refptr<ServiceWorkerRegistration>& @@ -91,8 +92,8 @@ void PushMessagingRouter::FindServiceWorkerRegistrationCallback( // service worker. version->RunAfterStartWorker( base::Bind(&PushMessagingRouter::DeliverMessageToWorker, - make_scoped_refptr(version), service_worker_registration, data, - deliver_message_callback), + make_scoped_refptr(version), service_worker_registration, + payload, deliver_message_callback), base::Bind(&PushMessagingRouter::DeliverMessageEnd, deliver_message_callback, service_worker_registration)); } @@ -101,7 +102,7 @@ void PushMessagingRouter::FindServiceWorkerRegistrationCallback( void PushMessagingRouter::DeliverMessageToWorker( const scoped_refptr<ServiceWorkerVersion>& service_worker, const scoped_refptr<ServiceWorkerRegistration>& service_worker_registration, - const std::string& data, + const PushEventPayload& payload, const DeliverMessageCallback& deliver_message_callback) { DCHECK_CURRENTLY_ON(BrowserThread::IO); int request_id = service_worker->StartRequest( @@ -109,7 +110,7 @@ void PushMessagingRouter::DeliverMessageToWorker( base::Bind(&PushMessagingRouter::DeliverMessageEnd, deliver_message_callback, service_worker_registration)); service_worker->DispatchSimpleEvent<ServiceWorkerHostMsg_PushEventFinished>( - request_id, ServiceWorkerMsg_PushEvent(request_id, data)); + request_id, ServiceWorkerMsg_PushEvent(request_id, payload)); } // static diff --git a/content/browser/push_messaging/push_messaging_router.h b/content/browser/push_messaging/push_messaging_router.h index 8cfa82c..64adb8a 100644 --- a/content/browser/push_messaging/push_messaging_router.h +++ b/content/browser/push_messaging/push_messaging_router.h @@ -18,6 +18,7 @@ namespace content { class BrowserContext; +struct PushEventPayload; class ServiceWorkerContextWrapper; class ServiceWorkerRegistration; class ServiceWorkerVersion; @@ -33,7 +34,7 @@ class PushMessagingRouter { BrowserContext* browser_context, const GURL& origin, int64_t service_worker_registration_id, - const std::string& data, + const PushEventPayload& payload, const DeliverMessageCallback& deliver_message_callback); private: @@ -42,7 +43,7 @@ class PushMessagingRouter { static void FindServiceWorkerRegistration( const GURL& origin, int64_t service_worker_registration_id, - const std::string& data, + const PushEventPayload& payload, const DeliverMessageCallback& deliver_message_callback, scoped_refptr<ServiceWorkerContextWrapper> service_worker_context); @@ -50,7 +51,7 @@ class PushMessagingRouter { // |data| on the Service Worker identified by |service_worker_registration|. // Must be called on the IO thread. static void FindServiceWorkerRegistrationCallback( - const std::string& data, + const PushEventPayload& payload, const DeliverMessageCallback& deliver_message_callback, ServiceWorkerStatusCode service_worker_status, const scoped_refptr<ServiceWorkerRegistration>& @@ -62,7 +63,7 @@ class PushMessagingRouter { const scoped_refptr<ServiceWorkerVersion>& service_worker, const scoped_refptr<ServiceWorkerRegistration>& service_worker_registration, - const std::string& data, + const PushEventPayload& payload, const DeliverMessageCallback& deliver_message_callback); // Gets called asynchronously after the Service Worker has dispatched the push diff --git a/content/browser/service_worker/embedded_worker_test_helper.cc b/content/browser/service_worker/embedded_worker_test_helper.cc index bfd13f3..f408ddf 100644 --- a/content/browser/service_worker/embedded_worker_test_helper.cc +++ b/content/browser/service_worker/embedded_worker_test_helper.cc @@ -20,6 +20,7 @@ #include "content/common/service_worker/embedded_worker_messages.h" #include "content/common/service_worker/embedded_worker_setup.mojom.h" #include "content/common/service_worker/service_worker_messages.h" +#include "content/public/common/push_event_payload.h" #include "content/public/test/mock_render_process_host.h" #include "content/public/test/test_browser_context.h" #include "mojo/public/cpp/bindings/strong_binding.h" @@ -224,7 +225,7 @@ void EmbeddedWorkerTestHelper::OnFetchEvent( void EmbeddedWorkerTestHelper::OnPushEvent(int embedded_worker_id, int request_id, - const std::string& data) { + const PushEventPayload& payload) { SimulateSend(new ServiceWorkerHostMsg_PushEventFinished( embedded_worker_id, request_id, blink::WebServiceWorkerEventResultCompleted)); @@ -372,12 +373,13 @@ void EmbeddedWorkerTestHelper::OnFetchEventStub( request)); } -void EmbeddedWorkerTestHelper::OnPushEventStub(int request_id, - const std::string& data) { +void EmbeddedWorkerTestHelper::OnPushEventStub( + int request_id, + const PushEventPayload& payload) { base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnPushEvent, weak_factory_.GetWeakPtr(), - current_embedded_worker_id_, request_id, data)); + current_embedded_worker_id_, request_id, payload)); } void EmbeddedWorkerTestHelper::OnSetupMojoStub( diff --git a/content/browser/service_worker/embedded_worker_test_helper.h b/content/browser/service_worker/embedded_worker_test_helper.h index 10c7169..3de05bd 100644 --- a/content/browser/service_worker/embedded_worker_test_helper.h +++ b/content/browser/service_worker/embedded_worker_test_helper.h @@ -30,6 +30,7 @@ class EmbeddedWorkerRegistry; class EmbeddedWorkerTestHelper; class MessagePortMessageFilter; class MockRenderProcessHost; +struct PushEventPayload; class ServiceWorkerContextCore; class ServiceWorkerContextWrapper; struct ServiceWorkerFetchRequest; @@ -125,7 +126,7 @@ class EmbeddedWorkerTestHelper : public IPC::Sender, const ServiceWorkerFetchRequest& request); virtual void OnPushEvent(int embedded_worker_id, int request_id, - const std::string& data); + const PushEventPayload& payload); // These functions simulate sending an EmbeddedHostMsg message to the // browser. @@ -152,7 +153,7 @@ class EmbeddedWorkerTestHelper : public IPC::Sender, void OnInstallEventStub(int request_id); void OnFetchEventStub(int request_id, const ServiceWorkerFetchRequest& request); - void OnPushEventStub(int request_id, const std::string& data); + void OnPushEventStub(int request_id, const PushEventPayload& payload); void OnSetupMojoStub(int thread_id, mojo::InterfaceRequest<mojo::ServiceProvider> services, mojo::ServiceProviderPtr exposed_services); |