Commit 325dbbc8 authored by Jian Li's avatar Jian Li Committed by Commit Bot

[Feed v2] Allow setting feed stream data in feed internals page

Bug: none
Change-Id: Iecc0cb44e239c1b4502e81bc50931230732af61a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2429930
Commit-Queue: Jian Li <jianli@chromium.org>
Reviewed-by: default avatarJustin DeWitt <dewittj@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarDan H <harringtond@chromium.org>
Cr-Commit-Position: refs/heads/master@{#814073}
parent ffaa4d8c
...@@ -175,5 +175,9 @@ found in the LICENSE file. ...@@ -175,5 +175,9 @@ found in the LICENSE file.
<input id="actions-endpoint-override"> <input id="actions-endpoint-override">
<button id="actions-endpoint-override-apply">Apply</button> <button id="actions-endpoint-override-apply">Apply</button>
<h2>Feed Stream Data (v2 only)</h2>
<input id="feed-stream-data-file" type="file">
<button id="feed-stream-data-override">Override</button>
</body> </body>
</html> </html>
...@@ -154,6 +154,18 @@ function setupEventListeners() { ...@@ -154,6 +154,18 @@ function setupEventListeners() {
$('actions-endpoint-override-apply').addEventListener('click', function() { $('actions-endpoint-override-apply').addEventListener('click', function() {
pageHandler.overrideFeedHost({url: $('actions-endpoint-override').value}); pageHandler.overrideFeedHost({url: $('actions-endpoint-override').value});
}); });
$('feed-stream-data-override').addEventListener('click', function() {
const file = $('feed-stream-data-file').files[0];
if (file && typeof pageHandler.overrideFeedStreamData == 'function') {
const reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = function(evt) {
const typedArray = new Uint8Array(reader.result);
pageHandler.overrideFeedStreamData([...typedArray]);
};
}
});
} }
function updatePage() { function updatePage() {
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
import("//build/config/android/channel.gni")
import("//mojo/public/tools/bindings/mojom.gni") import("//mojo/public/tools/bindings/mojom.gni")
mojom("mojo_bindings") { mojom("mojo_bindings") {
......
...@@ -128,4 +128,7 @@ interface PageHandler { ...@@ -128,4 +128,7 @@ interface PageHandler {
// This allows for testing the Feed against a development server. // This allows for testing the Feed against a development server.
OverrideActionUploadEndpoint(url.mojom.Url endpoint_url); OverrideActionUploadEndpoint(url.mojom.Url endpoint_url);
// Overrides the feed stream data with an encoded ElementsOutput proto message
// for testing purpose.
OverrideFeedStreamData(array<uint8> data);
}; };
...@@ -182,3 +182,8 @@ void FeedInternalsPageHandler::OverrideActionUploadEndpoint( ...@@ -182,3 +182,8 @@ void FeedInternalsPageHandler::OverrideActionUploadEndpoint(
const GURL& endpoint_url) { const GURL& endpoint_url) {
// Not implemented for Feed v1. // Not implemented for Feed v1.
} }
void FeedInternalsPageHandler::OverrideFeedStreamData(
const std::vector<uint8_t>& data) {
// Not implemented for Feed v1.
}
...@@ -47,6 +47,7 @@ class FeedInternalsPageHandler : public feed_internals::mojom::PageHandler { ...@@ -47,6 +47,7 @@ class FeedInternalsPageHandler : public feed_internals::mojom::PageHandler {
void GetFeedHistograms(GetFeedHistogramsCallback) override; void GetFeedHistograms(GetFeedHistogramsCallback) override;
void OverrideFeedHost(const GURL& host) override; void OverrideFeedHost(const GURL& host) override;
void OverrideActionUploadEndpoint(const GURL& endpoint_url) override; void OverrideActionUploadEndpoint(const GURL& endpoint_url) override;
void OverrideFeedStreamData(const std::vector<uint8_t>& data) override;
private: private:
mojo::Receiver<feed_internals::mojom::PageHandler> receiver_; mojo::Receiver<feed_internals::mojom::PageHandler> receiver_;
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h" #include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h"
#include "components/feed/core/common/pref_names.h" #include "components/feed/core/common/pref_names.h"
#include "components/feed/core/common/user_classifier.h" #include "components/feed/core/common/user_classifier.h"
#include "components/feed/core/proto/v2/ui.pb.h"
#include "components/feed/core/shared_prefs/pref_names.h" #include "components/feed/core/shared_prefs/pref_names.h"
#include "components/feed/core/v2/public/feed_service.h" #include "components/feed/core/v2/public/feed_service.h"
#include "components/feed/core/v2/public/feed_stream_api.h" #include "components/feed/core/v2/public/feed_stream_api.h"
...@@ -148,3 +149,12 @@ void FeedV2InternalsPageHandler::OverrideActionUploadEndpoint( ...@@ -148,3 +149,12 @@ void FeedV2InternalsPageHandler::OverrideActionUploadEndpoint(
feed::prefs::kActionsEndpointOverride, feed::prefs::kActionsEndpointOverride,
endpoint_url.is_valid() ? endpoint_url.spec() : std::string()); endpoint_url.is_valid() ? endpoint_url.spec() : std::string());
} }
void FeedV2InternalsPageHandler::OverrideFeedStreamData(
const std::vector<uint8_t>& data) {
feedui::StreamUpdate stream_update;
feedui::Slice* slice = stream_update.add_updated_slices()->mutable_slice();
slice->set_slice_id("SetByInternalsPage");
slice->mutable_xsurface_slice()->set_xsurface_frame(data.data(), data.size());
feed_stream_->SetForcedStreamUpdateForDebugging(stream_update);
}
...@@ -46,6 +46,7 @@ class FeedV2InternalsPageHandler : public feed_internals::mojom::PageHandler { ...@@ -46,6 +46,7 @@ class FeedV2InternalsPageHandler : public feed_internals::mojom::PageHandler {
void GetFeedHistograms(GetFeedHistogramsCallback) override; void GetFeedHistograms(GetFeedHistogramsCallback) override;
void OverrideFeedHost(const GURL& host) override; void OverrideFeedHost(const GURL& host) override;
void OverrideActionUploadEndpoint(const GURL& endpoint_url) override; void OverrideActionUploadEndpoint(const GURL& endpoint_url) override;
void OverrideFeedStreamData(const std::vector<uint8_t>& data) override;
private: private:
bool IsFeedAllowed(); bool IsFeedAllowed();
......
...@@ -239,8 +239,17 @@ void FeedStream::UpdateIsActivityLoggingEnabled() { ...@@ -239,8 +239,17 @@ void FeedStream::UpdateIsActivityLoggingEnabled() {
void FeedStream::AttachSurface(SurfaceInterface* surface) { void FeedStream::AttachSurface(SurfaceInterface* surface) {
metrics_reporter_->SurfaceOpened(surface->GetSurfaceId()); metrics_reporter_->SurfaceOpened(surface->GetSurfaceId());
// Skip normal processing when overriding stream data from the internals page.
if (forced_stream_update_for_debugging_.updated_slices_size() > 0) {
surface_updater_->SurfaceAdded(surface);
surface->StreamUpdate(forced_stream_update_for_debugging_);
return;
}
TriggerStreamLoad(); TriggerStreamLoad();
surface_updater_->SurfaceAdded(surface); surface_updater_->SurfaceAdded(surface);
// Cancel any scheduled model unload task. // Cancel any scheduled model unload task.
++unload_on_detach_sequence_number_; ++unload_on_detach_sequence_number_;
} }
...@@ -445,6 +454,11 @@ std::string FeedStream::DumpStateForDebugging() { ...@@ -445,6 +454,11 @@ std::string FeedStream::DumpStateForDebugging() {
return ss.str(); return ss.str();
} }
void FeedStream::SetForcedStreamUpdateForDebugging(
const feedui::StreamUpdate& stream_update) {
forced_stream_update_for_debugging_ = stream_update;
}
base::Time FeedStream::GetLastFetchTime() { base::Time FeedStream::GetLastFetchTime() {
const base::Time fetch_time = const base::Time fetch_time =
profile_prefs_->GetTime(feed::prefs::kLastFetchAttemptTime); profile_prefs_->GetTime(feed::prefs::kLastFetchAttemptTime);
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "base/version.h" #include "base/version.h"
#include "components/feed/core/common/enums.h" #include "components/feed/core/common/enums.h"
#include "components/feed/core/common/user_classifier.h" #include "components/feed/core/common/user_classifier.h"
#include "components/feed/core/proto/v2/ui.pb.h"
#include "components/feed/core/proto/v2/wire/response.pb.h" #include "components/feed/core/proto/v2/wire/response.pb.h"
#include "components/feed/core/v2/enums.h" #include "components/feed/core/v2/enums.h"
#include "components/feed/core/v2/protocol_translator.h" #include "components/feed/core/v2/protocol_translator.h"
...@@ -148,6 +149,8 @@ class FeedStream : public FeedStreamApi, ...@@ -148,6 +149,8 @@ class FeedStream : public FeedStreamApi,
DebugStreamData GetDebugStreamData() override; DebugStreamData GetDebugStreamData() override;
void ForceRefreshForDebugging() override; void ForceRefreshForDebugging() override;
std::string DumpStateForDebugging() override; std::string DumpStateForDebugging() override;
void SetForcedStreamUpdateForDebugging(
const feedui::StreamUpdate& stream_update) override;
void ReportSliceViewed(SurfaceId surface_id, void ReportSliceViewed(SurfaceId surface_id,
const std::string& slice_id) override; const std::string& slice_id) override;
...@@ -339,6 +342,10 @@ class FeedStream : public FeedStreamApi, ...@@ -339,6 +342,10 @@ class FeedStream : public FeedStreamApi,
// To allow tests to wait on task queue idle. // To allow tests to wait on task queue idle.
base::RepeatingClosure idle_callback_; base::RepeatingClosure idle_callback_;
// Stream update forced to use for new surfaces. This is provided in feed
// internals page for debugging purpose.
feedui::StreamUpdate forced_stream_update_for_debugging_;
base::WeakPtrFactory<FeedStream> weak_ptr_factory_{this}; base::WeakPtrFactory<FeedStream> weak_ptr_factory_{this};
}; };
......
...@@ -170,6 +170,9 @@ class FeedStreamApi { ...@@ -170,6 +170,9 @@ class FeedStreamApi {
virtual void ForceRefreshForDebugging() = 0; virtual void ForceRefreshForDebugging() = 0;
// Dumps some state information for debugging. // Dumps some state information for debugging.
virtual std::string DumpStateForDebugging() = 0; virtual std::string DumpStateForDebugging() = 0;
// Forces to render a StreamUpdate on all subsequent surface attaches.
virtual void SetForcedStreamUpdateForDebugging(
const feedui::StreamUpdate& stream_update) = 0;
}; };
} // namespace feed } // namespace feed
......
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