Commit db82c1cf authored by Mario Sanchez Prada's avatar Mario Sanchez Prada Committed by Commit Bot

Move WebPushSubscriptionOptions out of exposed blink API

This struct is no longer used outside of Blink, so we can remove it from
the public API and merge it along with blink::PushSubscriptionOptions,
which represents the same kind of information, but from a point of view
that is closer to the DOM and V8 than the struct being removed.

As it happened when cleaning up WebPushSubscription, to do this we also
needed to adjust a few places inside the PushMessaging module. Additionally,
we can also remove public/common/push_messaging entirely, since there are
no more files left in there now.

Bug: 939943
Change-Id: I643126db8f9391116464f45d79d761bc0ce4caac
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1645781
Commit-Queue: Mario Sanchez Prada <mario@igalia.com>
Reviewed-by: default avatarPeter Beverloo <peter@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#668369}
parent fc58c9b3
......@@ -99,7 +99,6 @@ source_set("headers") {
"page/launching_process_state.h",
"prerender/prerender_rel_type.h",
"privacy_preferences.h",
"push_messaging/web_push_subscription_options.h",
"scheduler/web_scheduler_tracked_feature.h",
"screen_orientation/web_screen_orientation_lock_type.h",
"screen_orientation/web_screen_orientation_type.h",
......
file://third_party/blink/renderer/modules/push_messaging/OWNERS
per-file *.typemap=set noparent
per-file *.typemap=file://ipc/SECURITY_OWNERS
per-file *_mojom_traits*.*=set noparent
per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
# TEAM: platform-capabilities@chromium.org
# COMPONENT: Blink>PushAPI
// Copyright 2016 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 THIRD_PARTY_BLINK_PUBLIC_COMMON_PUSH_MESSAGING_WEB_PUSH_SUBSCRIPTION_OPTIONS_H_
#define THIRD_PARTY_BLINK_PUBLIC_COMMON_PUSH_MESSAGING_WEB_PUSH_SUBSCRIPTION_OPTIONS_H_
#include <string>
#include "third_party/blink/public/common/common_export.h"
namespace blink {
// Structure to hold the options provided from the web app developer as
// part of asking for a new push subscription.
struct BLINK_COMMON_EXPORT WebPushSubscriptionOptions {
WebPushSubscriptionOptions() {}
~WebPushSubscriptionOptions() {}
// Whether or not the app developer agrees to provide user visible
// notifications whenever they receive a push message.
bool user_visible_only = false;
// The unique identifier of the application service which is used to
// verify the push message before delivery. This could either be an ID
// assigned by the developer console or the app server's public key.
std::string application_server_key;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_PUSH_MESSAGING_WEB_PUSH_SUBSCRIPTION_OPTIONS_H_
......@@ -7,7 +7,6 @@
#include <memory>
#include "base/memory/scoped_refptr.h"
#include "third_party/blink/public/common/push_messaging/web_push_subscription_options.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/core/dom/document.h"
......@@ -51,8 +50,9 @@ Vector<String> PushManager::supportedContentEncodings() {
return Vector<String>({"aes128gcm", "aesgcm"});
}
ScriptPromise PushManager::subscribe(ScriptState* script_state,
const PushSubscriptionOptionsInit* options,
ScriptPromise PushManager::subscribe(
ScriptState* script_state,
const PushSubscriptionOptionsInit* options_init,
ExceptionState& exception_state) {
if (!registration_->active()) {
return ScriptPromise::RejectWithDOMException(
......@@ -61,8 +61,8 @@ ScriptPromise PushManager::subscribe(ScriptState* script_state,
"Subscription failed - no active Service Worker"));
}
const WebPushSubscriptionOptions& web_options =
PushSubscriptionOptions::ToWeb(options, exception_state);
PushSubscriptionOptions* options =
PushSubscriptionOptions::FromOptionsInit(options_init, exception_state);
if (exception_state.HadException())
return ScriptPromise();
......@@ -86,13 +86,13 @@ ScriptPromise PushManager::subscribe(ScriptState* script_state,
DCHECK(messaging_client);
messaging_client->Subscribe(
registration_, web_options,
registration_, options,
LocalFrame::HasTransientUserActivation(frame,
true /* check_if_main_thread */),
std::make_unique<PushSubscriptionCallbacks>(resolver, registration_));
} else {
GetPushProvider(registration_)
->Subscribe(web_options,
->Subscribe(options,
LocalFrame::HasTransientUserActivation(
nullptr, true /* check_if_main_thread */),
std::make_unique<PushSubscriptionCallbacks>(resolver,
......
......@@ -32,7 +32,7 @@ class MODULES_EXPORT PushManager final : public ScriptWrappable {
// Web-exposed methods:
ScriptPromise subscribe(ScriptState* script_state,
const PushSubscriptionOptionsInit* options,
const PushSubscriptionOptionsInit* options_init,
ExceptionState& exception_state);
ScriptPromise getSubscription(ScriptState* script_state);
ScriptPromise permissionState(ScriptState* script_state,
......
......@@ -5,12 +5,11 @@
#include "third_party/blink/renderer/modules/push_messaging/push_manager.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/common/push_messaging/web_push_subscription_options.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
#include "third_party/blink/renderer/modules/push_messaging/push_subscription_options.h"
#include "third_party/blink/renderer/modules/push_messaging/push_subscription_options_init.h"
#include "third_party/blink/renderer/platform/wtf/text/base64.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
namespace {
......@@ -28,7 +27,7 @@ const uint8_t kApplicationServerKey[kApplicationServerKeyLength] = {
0xA8, 0xC1, 0xCF, 0xED, 0x20, 0xF7, 0x1F, 0xD1, 0x7F, 0xF2, 0x76,
0xB6, 0x01, 0x20, 0xD8, 0x35, 0xA5, 0xD9, 0x3C, 0x43, 0xDF};
void IsApplicationServerKeyValid(WebPushSubscriptionOptions output) {
void IsApplicationServerKeyValid(PushSubscriptionOptions* output) {
// Copy the key into a size+1 buffer so that it can be treated as a null
// terminated string for the purposes of EXPECT_EQ.
uint8_t sender_key[kApplicationServerKeyLength + 1];
......@@ -36,11 +35,15 @@ void IsApplicationServerKeyValid(WebPushSubscriptionOptions output) {
sender_key[i] = kApplicationServerKey[i];
sender_key[kApplicationServerKeyLength] = 0x0;
ASSERT_EQ(output.application_server_key.length(),
String application_server_key(
reinterpret_cast<const char*>(output->applicationServerKey()->Data()),
output->applicationServerKey()->ByteLength());
ASSERT_EQ(output->applicationServerKey()->ByteLength(),
kApplicationServerKeyLength);
ASSERT_EQ(reinterpret_cast<const char*>(sender_key),
output.application_server_key);
application_server_key.Latin1());
}
TEST(PushManagerTest, ValidSenderKey) {
......@@ -51,10 +54,10 @@ TEST(PushManagerTest, ValidSenderKey) {
kApplicationServerKeyLength)));
DummyExceptionStateForTesting exception_state;
WebPushSubscriptionOptions output =
PushSubscriptionOptions::ToWeb(options, exception_state);
PushSubscriptionOptions* output =
PushSubscriptionOptions::FromOptionsInit(options, exception_state);
ASSERT_TRUE(output);
ASSERT_FALSE(exception_state.HadException());
ASSERT_NO_FATAL_FAILURE(IsApplicationServerKeyValid(output));
}
......@@ -75,9 +78,9 @@ TEST(PushManagerTest, ValidBase64URLWithoutPaddingSenderKey) {
ArrayBufferOrArrayBufferViewOrString::FromString(base64_url));
DummyExceptionStateForTesting exception_state;
WebPushSubscriptionOptions output =
PushSubscriptionOptions::ToWeb(options, exception_state);
PushSubscriptionOptions* output =
PushSubscriptionOptions::FromOptionsInit(options, exception_state);
ASSERT_TRUE(output);
ASSERT_FALSE(exception_state.HadException());
ASSERT_NO_FATAL_FAILURE(IsApplicationServerKeyValid(output));
}
......@@ -91,8 +94,9 @@ TEST(PushManagerTest, InvalidSenderKeyLength) {
DOMArrayBuffer::Create(sender_key, kMaxKeyLength + 1)));
DummyExceptionStateForTesting exception_state;
WebPushSubscriptionOptions output =
PushSubscriptionOptions::ToWeb(options, exception_state);
PushSubscriptionOptions* output =
PushSubscriptionOptions::FromOptionsInit(options, exception_state);
ASSERT_TRUE(output);
ASSERT_TRUE(exception_state.HadException());
ASSERT_EQ(exception_state.Message(),
"The provided applicationServerKey is not valid.");
......@@ -107,8 +111,9 @@ TEST(PushManagerTest, InvalidBase64SenderKey) {
kApplicationServerKeyLength)));
DummyExceptionStateForTesting exception_state;
WebPushSubscriptionOptions output =
PushSubscriptionOptions::ToWeb(options, exception_state);
PushSubscriptionOptions* output =
PushSubscriptionOptions::FromOptionsInit(options, exception_state);
ASSERT_TRUE(output);
ASSERT_TRUE(exception_state.HadException());
ASSERT_EQ(exception_state.Message(),
"The provided applicationServerKey is not encoded as base64url "
......@@ -124,8 +129,9 @@ TEST(PushManagerTest, InvalidBase64URLWithPaddingSenderKey) {
kApplicationServerKeyLength)));
DummyExceptionStateForTesting exception_state;
WebPushSubscriptionOptions output =
PushSubscriptionOptions::ToWeb(options, exception_state);
PushSubscriptionOptions* output =
PushSubscriptionOptions::FromOptionsInit(options, exception_state);
ASSERT_TRUE(output);
ASSERT_TRUE(exception_state.HadException());
ASSERT_EQ(exception_state.Message(),
"The provided applicationServerKey is not encoded as base64url "
......
......@@ -7,7 +7,6 @@
#include <string>
#include <utility>
#include "third_party/blink/public/common/push_messaging/web_push_subscription_options.h"
#include "third_party/blink/public/mojom/frame/document_interface_broker.mojom-blink.h"
#include "third_party/blink/public/mojom/push_messaging/push_messaging_status.mojom-blink.h"
#include "third_party/blink/public/platform/modules/push_messaging/web_push_error.h"
......@@ -57,17 +56,17 @@ mojom::blink::PushMessaging* PushMessagingClient::GetService() {
void PushMessagingClient::Subscribe(
ServiceWorkerRegistration* service_worker_registration,
const WebPushSubscriptionOptions& options,
PushSubscriptionOptions* options,
bool user_gesture,
std::unique_ptr<PushSubscriptionCallbacks> callbacks) {
DCHECK(callbacks);
mojom::blink::PushSubscriptionOptionsPtr options_ptr =
mojom::blink::PushSubscriptionOptions::From(&options);
mojom::blink::PushSubscriptionOptions::From(options);
// If a developer provided an application server key in |options|, skip
// fetching the manifest.
if (options.application_server_key.empty()) {
if (!options->applicationServerKey()->ByteLength()) {
ManifestManager* manifest_manager =
ManifestManager::From(*GetSupplementable());
manifest_manager->RequestManifest(
......
......@@ -22,8 +22,8 @@ enum class PushRegistrationStatus;
} // namespace mojom
class KURL;
class PushSubscriptionOptions;
class ServiceWorkerRegistration;
struct WebPushSubscriptionOptions;
class PushMessagingClient final
: public GarbageCollectedFinalized<PushMessagingClient>,
......@@ -39,7 +39,7 @@ class PushMessagingClient final
static PushMessagingClient* From(LocalFrame* frame);
void Subscribe(ServiceWorkerRegistration* service_worker_registration,
const WebPushSubscriptionOptions& options,
PushSubscriptionOptions* options,
bool user_gesture,
std::unique_ptr<PushSubscriptionCallbacks> callbacks);
......
......@@ -7,35 +7,23 @@
#include <string>
#include <utility>
#include "third_party/blink/public/common/push_messaging/web_push_subscription_options.h"
#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
#include "third_party/blink/renderer/modules/push_messaging/push_subscription_options.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
namespace mojo {
blink::WebPushSubscriptionOptions
TypeConverter<blink::WebPushSubscriptionOptions,
blink::mojom::blink::PushSubscriptionOptionsPtr>::
Convert(const blink::mojom::blink::PushSubscriptionOptionsPtr& input) {
blink::WebPushSubscriptionOptions options;
options.user_visible_only = input->user_visible_only;
options.application_server_key =
std::string(input->application_server_key.begin(),
input->application_server_key.end());
return options;
}
blink::mojom::blink::PushSubscriptionOptionsPtr
TypeConverter<blink::mojom::blink::PushSubscriptionOptionsPtr,
const blink::WebPushSubscriptionOptions*>::
Convert(const blink::WebPushSubscriptionOptions* input) {
auto output = blink::mojom::blink::PushSubscriptionOptions::New();
output->user_visible_only = input->user_visible_only;
output->application_server_key = WTF::Vector<uint8_t>();
output->application_server_key.AppendRange(
input->application_server_key.begin(),
input->application_server_key.end());
return output;
blink::mojom::blink::PushSubscriptionOptionsPtr TypeConverter<
blink::mojom::blink::PushSubscriptionOptionsPtr,
blink::PushSubscriptionOptions*>::Convert(blink::PushSubscriptionOptions*
input) {
Vector<uint8_t> application_server_key;
application_server_key.Append(
reinterpret_cast<uint8_t*>(input->applicationServerKey()->Data()),
input->applicationServerKey()->ByteLength());
return blink::mojom::blink::PushSubscriptionOptions::New(
input->userVisibleOnly(), application_server_key);
}
} // namespace mojo
......@@ -9,23 +9,16 @@
#include "third_party/blink/renderer/modules/modules_export.h"
namespace blink {
struct WebPushSubscriptionOptions;
class PushSubscriptionOptions;
} // namespace blink
namespace mojo {
template <>
struct TypeConverter<blink::WebPushSubscriptionOptions,
blink::mojom::blink::PushSubscriptionOptionsPtr> {
static blink::WebPushSubscriptionOptions Convert(
const blink::mojom::blink::PushSubscriptionOptionsPtr& input);
};
template <>
struct TypeConverter<blink::mojom::blink::PushSubscriptionOptionsPtr,
const blink::WebPushSubscriptionOptions*> {
blink::PushSubscriptionOptions*> {
static blink::mojom::blink::PushSubscriptionOptionsPtr Convert(
const blink::WebPushSubscriptionOptions* input);
blink::PushSubscriptionOptions* input);
};
} // namespace mojo
......
......@@ -6,8 +6,7 @@
#include <utility>
#include "third_party/blink/public/common/push_messaging/web_push_subscription_options.h"
#include "third_party/blink/public/mojom/push_messaging/push_messaging_status.mojom-shared.h"
#include "third_party/blink/public/mojom/push_messaging/push_messaging_status.mojom-blink.h"
#include "third_party/blink/public/platform/interface_provider.h"
#include "third_party/blink/public/platform/modules/push_messaging/web_push_error.h"
#include "third_party/blink/public/platform/platform.h"
......@@ -84,13 +83,13 @@ void PushProvider::GetInterface(mojom::blink::PushMessagingRequest request) {
}
void PushProvider::Subscribe(
const WebPushSubscriptionOptions& options,
PushSubscriptionOptions* options,
bool user_gesture,
std::unique_ptr<PushSubscriptionCallbacks> callbacks) {
DCHECK(callbacks);
mojom::blink::PushSubscriptionOptionsPtr content_options_ptr =
mojom::blink::PushSubscriptionOptions::From(&options);
mojom::blink::PushSubscriptionOptions::From(options);
push_messaging_manager_->Subscribe(
GetSupplementable()->RegistrationId(), std::move(content_options_ptr),
......
......@@ -26,7 +26,7 @@ enum class PushRegistrationStatus;
} // namespace mojom
class KURL;
struct WebPushSubscriptionOptions;
class PushSubscriptionOptions;
class PushProvider final : public GarbageCollectedFinalized<PushProvider>,
public Supplement<ServiceWorkerRegistration> {
......@@ -40,7 +40,7 @@ class PushProvider final : public GarbageCollectedFinalized<PushProvider>,
static PushProvider* From(ServiceWorkerRegistration* registration);
void Subscribe(const WebPushSubscriptionOptions& options,
void Subscribe(PushSubscriptionOptions* options,
bool user_gesture,
std::unique_ptr<PushSubscriptionCallbacks> callbacks);
void Unsubscribe(std::unique_ptr<PushUnsubscribeCallbacks> callbacks);
......
......@@ -4,7 +4,6 @@
#include "third_party/blink/renderer/modules/push_messaging/push_subscription_options.h"
#include "third_party/blink/public/common/push_messaging/web_push_subscription_options.h"
#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
#include "third_party/blink/renderer/modules/push_messaging/push_subscription_options_init.h"
#include "third_party/blink/renderer/platform/bindings/exception_code.h"
......@@ -19,12 +18,13 @@ namespace {
const int kMaxApplicationServerKeyLength = 255;
std::string BufferSourceToString(
Vector<uint8_t> BufferSourceToVector(
const ArrayBufferOrArrayBufferViewOrString& application_server_key,
ExceptionState& exception_state) {
char* input;
int length;
Vector<char> decoded_application_server_key;
Vector<uint8_t> result;
// Convert the input array into a string of bytes.
if (application_server_key.IsArrayBuffer()) {
......@@ -45,13 +45,13 @@ std::string BufferSourceToString(
DOMExceptionCode::kInvalidCharacterError,
"The provided applicationServerKey is not encoded as base64url "
"without padding.");
return std::string();
return result;
}
input = reinterpret_cast<char*>(decoded_application_server_key.data());
length = decoded_application_server_key.size();
} else {
NOTREACHED();
return std::string();
return result;
}
// Check the validity of the sender info. It must either be a 65-byte
......@@ -63,28 +63,31 @@ std::string BufferSourceToString(
(std::find_if_not(input, input + length, &WTF::IsASCIIDigit<char>) ==
input + length);
if (is_vapid || is_sender_id)
return std::string(input, length);
if (is_vapid || is_sender_id) {
result.Append(input, length);
} else {
exception_state.ThrowDOMException(
DOMExceptionCode::kInvalidAccessError,
"The provided applicationServerKey is not valid.");
return std::string();
}
return result;
}
} // namespace
// static
WebPushSubscriptionOptions PushSubscriptionOptions::ToWeb(
const PushSubscriptionOptionsInit* options,
PushSubscriptionOptions* PushSubscriptionOptions::FromOptionsInit(
const PushSubscriptionOptionsInit* options_init,
ExceptionState& exception_state) {
WebPushSubscriptionOptions web_options;
web_options.user_visible_only = options->userVisibleOnly();
if (options->hasApplicationServerKey()) {
web_options.application_server_key =
BufferSourceToString(options->applicationServerKey(), exception_state);
Vector<uint8_t> application_server_key;
if (options_init->hasApplicationServerKey()) {
application_server_key.AppendVector(BufferSourceToVector(
options_init->applicationServerKey(), exception_state));
}
return web_options;
return MakeGarbageCollected<PushSubscriptionOptions>(
options_init->userVisibleOnly(), application_server_key);
}
PushSubscriptionOptions::PushSubscriptionOptions(
......
......@@ -15,16 +15,15 @@ namespace blink {
class DOMArrayBuffer;
class ExceptionState;
class PushSubscriptionOptionsInit;
struct WebPushSubscriptionOptions;
class PushSubscriptionOptions final : public ScriptWrappable {
DEFINE_WRAPPERTYPEINFO();
public:
// Converts developer-provided dictionary to WebPushSubscriptionOptions.
// Converts developer-provided dictionary to PushSubscriptionOptions.
// Throws if applicationServerKey is invalid.
MODULES_EXPORT static WebPushSubscriptionOptions ToWeb(
const PushSubscriptionOptionsInit* options,
static MODULES_EXPORT PushSubscriptionOptions* FromOptionsInit(
const PushSubscriptionOptionsInit* options_init,
ExceptionState& exception_state);
static PushSubscriptionOptions* Create(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment