blob: 7359dafe2a2f9443fedc23b15e0cffcf9e54e7d0 [file] [log] [blame]
// Copyright 2019 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 "chrome/browser/sharing/sms/sms_remote_fetcher.h"
#include "base/check.h"
#include "build/build_config.h"
#include "chrome/browser/sharing/sms/sms_flags.h"
#include "chrome/browser/sharing/sms/sms_remote_fetcher_ui_controller.h"
#include "content/public/browser/web_contents.h"
#include "url/gurl.h"
#include "url/origin.h"
base::OnceClosure FetchRemoteSms(
content::WebContents* web_contents,
const url::Origin& origin,
base::OnceCallback<void(base::Optional<std::vector<url::Origin>>,
base::Optional<std::string>,
base::Optional<content::SmsFetchFailureType>)>
callback) {
// TODO(crbug.com/1015645): We should have a new failure type when the feature
// is disabled or no device is available.
if (!base::FeatureList::IsEnabled(kWebOTPCrossDevice)) {
std::move(callback).Run(base::nullopt, base::nullopt, base::nullopt);
// kWebOTPCrossDevice will be disabled for a large number of users. There's
// no need to call any cancel callback in such case.
return base::NullCallback();
}
// The current distinction of local fetcher being non-Android and remote fetcher
// being Android is a simplification we have made at this point and not a
// fundamental limitation. This may be relaxed in the future. e.g. allows
// tablets that run Android fetch a remote sms.
#if !defined(OS_ANDROID)
auto* ui_controller =
SmsRemoteFetcherUiController::GetOrCreateFromWebContents(web_contents);
return ui_controller->FetchRemoteSms(origin, std::move(callback));
#else
std::move(callback).Run(base::nullopt, base::nullopt, base::nullopt);
return base::NullCallback();
#endif
}