Commit 772faacf authored by Dan Harrington's avatar Dan Harrington Committed by Commit Bot

Set more params on Feed request

Bug: 1044139
Change-Id: Ie5aeea0f8e21d840fb0d83b93417be18e2edcf24
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2135015Reviewed-by: default avatarIan Wells <iwells@chromium.org>
Commit-Queue: Dan H <harringtond@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756791}
parent 05c82626
......@@ -16,6 +16,7 @@
#include "chrome/browser/profiles/profile_key.h"
#include "chrome/browser/signin/identity_manager_factory.h"
#include "chrome/common/channel_info.h"
#include "chrome/common/chrome_version.h"
#include "components/feed/core/proto/v2/store.pb.h"
#include "components/feed/core/v2/public/feed_service.h"
#include "components/feed/core/v2/refresh_task_scheduler.h"
......@@ -84,6 +85,10 @@ KeyedService* FeedServiceFactory::BuildServiceInstanceFor(
base::FilePath feed_dir(profile->GetPath().Append(kFeedv2Folder));
feed::ChromeInfo chrome_info;
chrome_info.version = base::Version({CHROME_VERSION});
chrome_info.channel = chrome::GetChannel();
return new FeedService(
std::make_unique<FeedServiceDelegateImpl>(),
std::unique_ptr<RefreshTaskScheduler>(), // TODO(harringtond): implement
......@@ -94,7 +99,7 @@ KeyedService* FeedServiceFactory::BuildServiceInstanceFor(
feed_dir.AppendASCII("streamdb"), background_task_runner),
identity_manager,
storage_partition->GetURLLoaderFactoryForBrowserProcess(),
background_task_runner, api_key);
background_task_runner, api_key, chrome_info);
}
content::BrowserContext* FeedServiceFactory::GetBrowserContextToUse(
......
......@@ -29,6 +29,7 @@ source_set("feed_core_v2") {
"public/feed_service.cc",
"public/feed_service.h",
"public/feed_stream_api.h",
"public/types.h",
"refresh_task_scheduler.h",
"request_throttler.cc",
"request_throttler.h",
......@@ -48,6 +49,7 @@ source_set("feed_core_v2") {
"tasks/load_stream_task.h",
"tasks/wait_for_store_initialize_task.cc",
"tasks/wait_for_store_initialize_task.h",
"types.h",
]
deps = [
"//components/feed/core:feed_core",
......@@ -57,6 +59,7 @@ source_set("feed_core_v2") {
"//components/signin/public/identity_manager",
"//components/variations",
"//components/variations/net",
"//components/version_info:channel",
"//components/web_resource:web_resource",
"//net",
"//services/network/public/cpp",
......@@ -77,6 +80,7 @@ source_set("core_unit_tests") {
"feed_network_impl_unittest.cc",
"feed_store_unittest.cc",
"feed_stream_unittest.cc",
"proto_util_unittest.cc",
"request_throttler_unittest.cc",
"stream_model_unittest.cc",
"stream_model_update_request_unittest.cc",
......@@ -99,6 +103,7 @@ source_set("core_unit_tests") {
"//components/prefs:test_support",
"//components/signin/public/identity_manager",
"//components/signin/public/identity_manager:test_support",
"//components/version_info:channel",
"//net:test_support",
"//services/network:test_support",
"//services/network/public/cpp",
......
......@@ -186,16 +186,15 @@ FeedStream::WireResponseTranslator::TranslateWireResponse(
current_time);
}
FeedStream::FeedStream(
RefreshTaskScheduler* refresh_task_scheduler,
EventObserver* stream_event_observer,
Delegate* delegate,
PrefService* profile_prefs,
FeedNetwork* feed_network,
FeedStore* feed_store,
const base::Clock* clock,
const base::TickClock* tick_clock,
scoped_refptr<base::SequencedTaskRunner> background_task_runner)
FeedStream::FeedStream(RefreshTaskScheduler* refresh_task_scheduler,
EventObserver* stream_event_observer,
Delegate* delegate,
PrefService* profile_prefs,
FeedNetwork* feed_network,
FeedStore* feed_store,
const base::Clock* clock,
const base::TickClock* tick_clock,
const ChromeInfo& chrome_info)
: refresh_task_scheduler_(refresh_task_scheduler),
stream_event_observer_(stream_event_observer),
delegate_(delegate),
......@@ -204,7 +203,7 @@ FeedStream::FeedStream(
store_(feed_store),
clock_(clock),
tick_clock_(tick_clock),
background_task_runner_(background_task_runner),
chrome_info_(chrome_info),
task_queue_(this),
user_classifier_(std::make_unique<UserClassifier>(profile_prefs, clock)),
request_throttler_(profile_prefs, clock) {
......
......@@ -12,6 +12,7 @@
#include "base/observer_list.h"
#include "base/sequenced_task_runner.h"
#include "base/task_runner_util.h"
#include "base/version.h"
#include "components/feed/core/common/enums.h"
#include "components/feed/core/common/user_classifier.h"
#include "components/feed/core/proto/v2/wire/response.pb.h"
......@@ -82,7 +83,7 @@ class FeedStream : public FeedStreamApi,
FeedStore* feed_store,
const base::Clock* clock,
const base::TickClock* tick_clock,
scoped_refptr<base::SequencedTaskRunner> background_task_runner);
const ChromeInfo& chrome_info);
~FeedStream() override;
FeedStream(const FeedStream&) = delete;
......@@ -158,6 +159,7 @@ class FeedStream : public FeedStreamApi,
StreamModel* GetModel() { return model_.get(); }
const base::Clock* GetClock() { return clock_; }
const ChromeInfo& GetChromeInfo() const { return chrome_info_; }
WireResponseTranslator* GetWireResponseTranslator() const {
return wire_response_translator_;
......@@ -196,7 +198,7 @@ class FeedStream : public FeedStreamApi,
const base::TickClock* tick_clock_;
WireResponseTranslator* wire_response_translator_;
scoped_refptr<base::SequencedTaskRunner> background_task_runner_;
ChromeInfo chrome_info_;
offline_pages::TaskQueue task_queue_;
// Whether the model is being loaded. Used to prevent multiple simultaneous
......
......@@ -251,11 +251,13 @@ class FeedStreamTest : public testing::Test, public FeedStream::Delegate {
feed::prefs::RegisterFeedSharedProfilePrefs(profile_prefs_.registry());
feed::RegisterProfilePrefs(profile_prefs_.registry());
CHECK_EQ(kTestTimeEpoch, task_environment_.GetMockClock()->Now());
ChromeInfo chrome_info;
chrome_info.channel = version_info::Channel::STABLE;
chrome_info.version = base::Version({99, 1, 9911, 2});
stream_ = std::make_unique<FeedStream>(
&refresh_scheduler_, &event_observer_, this, &profile_prefs_, &network_,
store_.get(), task_environment_.GetMockClock(),
task_environment_.GetMockTickClock(),
task_environment_.GetMainThreadTaskRunner());
task_environment_.GetMockTickClock(), chrome_info);
// Set the user classifier.
auto user_classifier = std::make_unique<TestUserClassifier>(
......
......@@ -5,12 +5,105 @@
#include "components/feed/core/v2/proto_util.h"
#include <tuple>
#include <vector>
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
#include "base/system/sys_info.h"
#include "build/build_config.h"
#include "components/feed/core/proto/v2/store.pb.h"
#include "components/feed/core/v2/feed_stream.h"
#if defined(OS_ANDROID)
#include "base/android/build_info.h"
#endif
namespace feed {
namespace {
feedwire::Version::Architecture GetBuildArchitecture() {
#if defined(ARCH_CPU_X86_64)
return feedwire::Version::X86_64;
#elif defined(ARCH_CPU_X86)
return feedwire::Version::X86;
#elif defined(ARCH_CPU_MIPS64)
return feedwire::Version::MIPS64;
#elif defined(ARCH_CPU_MIPS)
return feedwire::Version::MIPS;
#elif defined(ARCH_CPU_ARM64)
return feedwire::Version::ARM64;
#elif defined(ARCH_CPU_ARMEL)
return feedwire::Version::ARM;
#else
return feedwire::Version::UNKNOWN_ARCHITECTURE;
#endif
}
feedwire::Version::Architecture GetSystemArchitecture() {
// By default, use |GetBuildArchitecture()|.
// In the case of x86 and ARM, the OS might be x86_64 or ARM_64.
feedwire::Version::Architecture build_arch = GetBuildArchitecture();
if (build_arch == feedwire::Version::X86 &&
base::SysInfo::OperatingSystemArchitecture() == "x86_64") {
return feedwire::Version::X86_64;
}
if (feedwire::Version::ARM &&
base::SysInfo::OperatingSystemArchitecture() == "arm64") {
return feedwire::Version::ARM64;
}
return build_arch;
}
feedwire::Version::BuildType GetBuildType(version_info::Channel channel) {
switch (channel) {
case version_info::Channel::CANARY:
return feedwire::Version::ALPHA;
case version_info::Channel::DEV:
return feedwire::Version::DEV;
case version_info::Channel::BETA:
return feedwire::Version::BETA;
case version_info::Channel::STABLE:
return feedwire::Version::RELEASE;
default:
return feedwire::Version::UNKNOWN_BUILD_TYPE;
}
}
feedwire::Version GetPlatformVersionMessage() {
feedwire::Version result;
result.set_architecture(GetSystemArchitecture());
result.set_build_type(feedwire::Version::RELEASE);
int32_t major, minor, revision;
base::SysInfo::OperatingSystemVersionNumbers(&major, &minor, &revision);
result.set_major(major);
result.set_minor(minor);
result.set_revision(revision);
#if defined(OS_ANDROID)
result.set_api_version(base::android::BuildInfo::GetInstance()->sdk_int());
#endif
return result;
}
feedwire::Version GetAppVersionMessage(const ChromeInfo& chrome_info) {
feedwire::Version result;
result.set_architecture(GetBuildArchitecture());
result.set_build_type(GetBuildType(chrome_info.channel));
// Chrome's version is in the format: MAJOR,MINOR,BUILD,PATCH.
const std::vector<uint32_t>& numbers = chrome_info.version.components();
if (numbers.size() > 3) {
result.set_major(static_cast<int32_t>(numbers[0]));
result.set_minor(static_cast<int32_t>(numbers[1]));
result.set_build(static_cast<int32_t>(numbers[2]));
result.set_revision(static_cast<int32_t>(numbers[3]));
}
#if defined(OS_ANDROID)
result.set_api_version(base::android::BuildInfo::GetInstance()->sdk_int());
#endif
return result;
}
} // namespace
std::string ContentIdString(const feedwire::ContentId& content_id) {
return base::StrCat({content_id.content_domain(), ",",
......@@ -34,6 +127,24 @@ bool CompareContentId(const feedwire::ContentId& a,
std::tie(b.content_domain(), b_id, b_type);
}
feedwire::ClientInfo CreateClientInfo(const ChromeInfo& chrome_info) {
feedwire::ClientInfo client_info;
// TODO(harringtond): Fill out locale.
// TODO(harringtond): Fill out DisplayInfo.
// TODO(harringtond): Fill out client_instance_id.
// TODO(harringtond): Fill out advertising_id.
// TODO(harringtond): Fill out device_country.
#if defined(OS_ANDROID)
client_info.set_platform_type(feedwire::ClientInfo::ANDROID_ID);
#elif defined(OS_IOS)
client_info.set_platform_type(feedwire::ClientInfo::IOS);
#endif
client_info.set_app_type(feedwire::ClientInfo::CHROME);
*client_info.mutable_platform_version() = GetPlatformVersionMessage();
*client_info.mutable_app_version() = GetAppVersionMessage(chrome_info);
return client_info;
}
} // namespace feed
namespace feedstore {
......
......@@ -8,8 +8,9 @@
#include <string>
#include "base/time/time.h"
#include "components/feed/core/proto/v2/wire/client_info.pb.h"
#include "components/feed/core/proto/v2/wire/content_id.pb.h"
#include "components/feed/core/v2/types.h"
namespace feedstore {
class StreamData;
......@@ -18,6 +19,8 @@ class StreamData;
// Helper functions/classes for dealing with feed proto messages.
namespace feed {
using ContentId = feedwire::ContentId;
struct ChromeInfo;
std::string ContentIdString(const feedwire::ContentId&);
bool Equal(const feedwire::ContentId& a, const feedwire::ContentId& b);
......@@ -32,6 +35,8 @@ class ContentIdCompareFunctor {
}
};
feedwire::ClientInfo CreateClientInfo(const ChromeInfo& chrome_info);
} // namespace feed
namespace feedstore {
......
// Copyright 2020 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 "components/feed/core/v2/proto_util.h"
#include "components/feed/core/proto/v2/wire/client_info.pb.h"
#include "components/feed/core/v2/types.h"
#include "components/version_info/channel.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace feed {
namespace {
TEST(ProtoUtilTest, CreateClientInfo) {
ChromeInfo chrome_info;
chrome_info.version = base::Version({1, 2, 3, 4});
chrome_info.channel = version_info::Channel::STABLE;
feedwire::ClientInfo result = CreateClientInfo(chrome_info);
EXPECT_EQ(feedwire::ClientInfo::CHROME, result.app_type());
EXPECT_EQ(feedwire::Version::RELEASE, result.app_version().build_type());
EXPECT_EQ(1, result.app_version().major());
EXPECT_EQ(2, result.app_version().minor());
EXPECT_EQ(3, result.app_version().build());
EXPECT_EQ(4, result.app_version().revision());
}
} // namespace
} // namespace feed
......@@ -82,7 +82,8 @@ FeedService::FeedService(
signin::IdentityManager* identity_manager,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
scoped_refptr<base::SequencedTaskRunner> background_task_runner,
const std::string& api_key)
const std::string& api_key,
const ChromeInfo& chrome_info)
: delegate_(std::move(delegate)),
refresh_task_scheduler_(std::move(refresh_task_scheduler)) {
stream_delegate_ = std::make_unique<StreamDelegateImpl>(local_state);
......@@ -97,7 +98,7 @@ FeedService::FeedService(
nullptr, // TODO(harringtond): Implement EventObserver.
stream_delegate_.get(), profile_prefs, feed_network_.get(), store_.get(),
base::DefaultClock::GetInstance(), base::DefaultTickClock::GetInstance(),
background_task_runner);
chrome_info);
stream_delegate_->Initialize(static_cast<FeedStream*>(stream_.get()));
......
......@@ -11,6 +11,7 @@
#include "base/files/file_path.h"
#include "base/memory/scoped_refptr.h"
#include "components/feed/core/v2/public/feed_stream_api.h"
#include "components/feed/core/v2/public/types.h"
#include "components/keyed_service/core/keyed_service.h"
#include "components/leveldb_proto/public/proto_database.h"
#include "components/web_resource/eula_accepted_notifier.h"
......@@ -57,7 +58,8 @@ class FeedService : public KeyedService {
signin::IdentityManager* identity_manager,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
scoped_refptr<base::SequencedTaskRunner> background_task_runner,
const std::string& api_key);
const std::string& api_key,
const ChromeInfo& chrome_info);
~FeedService() override;
FeedService(const FeedService&) = delete;
FeedService& operator=(const FeedService&) = delete;
......
......@@ -8,8 +8,7 @@
#include <vector>
#include "base/observer_list_types.h"
#include "base/util/type_safety/id_type.h"
#include "components/feed/core/proto/v2/wire/content_id.pb.h"
#include "components/feed/core/v2/public/types.h"
namespace feedui {
class StreamUpdate;
......@@ -19,12 +18,6 @@ class DataOperation;
}
namespace feed {
using ContentId = feedwire::ContentId;
// Uniquely identifies a revision of a |feedstore::Content|. If Content changes,
// it is assigned a new revision number.
using ContentRevision = util::IdTypeU32<class ContentRevisionClass>;
// A unique ID for an ephemeral change.
using EphemeralChangeId = util::IdTypeU32<class EphemeralChangeIdClass>;
// This is the public access point for interacting with the Feed stream
// contents.
......
// Copyright 2020 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 COMPONENTS_FEED_CORE_V2_PUBLIC_TYPES_H_
#define COMPONENTS_FEED_CORE_V2_PUBLIC_TYPES_H_
#include "base/util/type_safety/id_type.h"
#include "base/version.h"
#include "components/version_info/channel.h"
namespace feed {
// Information about the Chrome build.
struct ChromeInfo {
version_info::Channel channel{};
base::Version version;
};
// A unique ID for an ephemeral change.
using EphemeralChangeId = util::IdTypeU32<class EphemeralChangeIdClass>;
} // namespace feed
#endif // COMPONENTS_FEED_CORE_V2_PUBLIC_TYPES_H_
......@@ -8,8 +8,8 @@
#include <memory>
#include <vector>
#include "components/feed/core/proto/v2/store.pb.h"
#include "components/feed/core/v2/public/feed_stream_api.h"
#include "components/feed/core/v2/stream_model/feature_tree.h"
#include "components/feed/core/v2/types.h"
namespace feed {
namespace stream_model {
......
......@@ -13,7 +13,7 @@
#include "base/util/type_safety/id_type.h"
#include "components/feed/core/proto/v2/store.pb.h"
#include "components/feed/core/v2/proto_util.h"
#include "components/feed/core/v2/public/feed_stream_api.h"
#include "components/feed/core/v2/types.h"
namespace feed {
namespace stream_model {
......
......@@ -11,9 +11,9 @@
#include "components/feed/core/proto/v2/store.pb.h"
#include "components/feed/core/v2/feed_store.h"
#include "components/feed/core/v2/proto_util.h"
#include "components/feed/core/v2/public/feed_stream_api.h"
#include "components/feed/core/v2/scheduling.h"
#include "components/feed/core/v2/stream_model_update_request.h"
#include "components/feed/core/v2/types.h"
namespace feed {
......
......@@ -16,6 +16,7 @@
#include "components/feed/core/proto/v2/wire/request.pb.h"
#include "components/feed/core/v2/feed_network.h"
#include "components/feed/core/v2/feed_stream.h"
#include "components/feed/core/v2/proto_util.h"
#include "components/feed/core/v2/stream_model.h"
#include "components/feed/core/v2/stream_model_update_request.h"
......@@ -68,10 +69,9 @@ void LoadStreamTask::LoadFromStoreComplete(
// TODO(harringtond): Add throttling.
// TODO(harringtond): Request parameters here are all placeholder values.
feedwire::Request request;
feedwire::ClientInfo& client_info =
*request.mutable_feed_request()->mutable_client_info();
client_info.set_platform_type(feedwire::ClientInfo::ANDROID_ID);
client_info.set_app_type(feedwire::ClientInfo::CHROME);
*request.mutable_feed_request()->mutable_client_info() =
CreateClientInfo(stream_->GetChromeInfo());
request.mutable_feed_request()->mutable_feed_query()->set_reason(
feedwire::FeedQuery::MANUAL_REFRESH);
......
......@@ -13,6 +13,7 @@
#include "components/feed/core/v2/feed_network.h"
#include "components/feed/core/v2/tasks/load_stream_from_store_task.h"
#include "components/offline_pages/task/task.h"
#include "components/version_info/channel.h"
namespace feed {
class FeedStream;
......
......@@ -11,7 +11,8 @@
#include "base/time/time.h"
#include "components/feed/core/proto/v2/store.pb.h"
#include "components/feed/core/v2/public/feed_stream_api.h"
#include "components/feed/core/v2/proto_util.h"
#include "components/feed/core/v2/types.h"
// Functions that help build a feedstore::StreamStructure for testing.
namespace feed {
......
// Copyright 2020 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 COMPONENTS_FEED_CORE_V2_TYPES_H_
#define COMPONENTS_FEED_CORE_V2_TYPES_H_
#include "base/util/type_safety/id_type.h"
#include "components/feed/core/v2/public/types.h"
namespace feed {
// Make sure public types are included here too.
// See components/feed/core/v2/public/types.h.
using ::feed::ChromeInfo;
using ::feed::EphemeralChangeId;
// Uniquely identifies a revision of a |feedstore::Content|. If Content changes,
// it is assigned a new revision number.
using ContentRevision = util::IdTypeU32<class ContentRevisionClass>;
} // namespace feed
#endif // COMPONENTS_FEED_CORE_V2_PUBLIC_TYPES_H_
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