// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/public/provider/chrome/browser/push_notification/push_notification_api.h"
#import "base/task/sequenced_task_runner.h"
namespace ios {
namespace provider {
namespace {
// Domain for Chromium push_notification error API.
NSString* const kChromiumPushNotificationErrorDomain =
@"chromium_push_notification_error_domain";
// Helper method that asynchronously invoke `completion_handler`
// with an `NSFeatureUnsupportedError` on the current sequence.
void FailWithUnsupportedFeatureError(
PushNotificationService::CompletionHandler completion_handler) {
base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, base::BindOnce(^() {
NSError* error =
[NSError errorWithDomain:kChromiumPushNotificationErrorDomain
code:NSFeatureUnsupportedError
userInfo:nil];
completion_handler(error);
}));
}
class ChromiumPushNotificationService final : public PushNotificationService {
public:
// PushNotificationService implementation.
void RegisterDevice(PushNotificationConfiguration* config,
void (^completion_handler)(NSError* error)) final;
void UnregisterDevice(void (^completion_handler)(NSError* error)) final;
bool DeviceTokenIsSet() const final;
protected:
// PushNotificationService implementation.
void SetAccountsToDevice(NSArray<NSString*>* account_ids,
CompletionHandler completion_handler) final;
void SetPreferences(NSString* account_id,
PreferenceMap preference_map,
CompletionHandler completion_handler) final;
};
void ChromiumPushNotificationService::RegisterDevice(
PushNotificationConfiguration* config,
void (^completion_handler)(NSError* error)) {
// Chromium does not initialize the device's connection to the push
// notification server. As a result, the `completion_handler` is called with
// a NSFeatureUnsupportedError.
FailWithUnsupportedFeatureError(completion_handler);
}
void ChromiumPushNotificationService::UnregisterDevice(
void (^completion_handler)(NSError* error)) {
// Chromium does not unregister the device on the push notification server. As
// a result, the `completion_handler` is called with a
// NSFeatureUnsupportedError.
FailWithUnsupportedFeatureError(completion_handler);
}
bool ChromiumPushNotificationService::DeviceTokenIsSet() const {
return false;
}
void ChromiumPushNotificationService::SetAccountsToDevice(
NSArray<NSString*>* account_ids,
void (^completion_handler)(NSError* error)) {
// Chromium does not initialize the device's connection to the push
// notification server. As a result, the `completion_handler` is called with
// a NSFeatureUnsupportedError.
FailWithUnsupportedFeatureError(completion_handler);
}
void ChromiumPushNotificationService::SetPreferences(
NSString* account_id,
PreferenceMap preference_map,
CompletionHandler completion_handler) {
// Chromium does not initialize the device's connection to the push
// notification server. As a result, the `completion_handler` is called with
// a NSFeatureUnsupportedError.
FailWithUnsupportedFeatureError(completion_handler);
}
} // namespace
std::unique_ptr<PushNotificationService> CreatePushNotificationService() {
return std::make_unique<ChromiumPushNotificationService>();
}
} // namespace provider
} // namespace ios