Commit 755a41c0 authored by Min Qin's avatar Min Qin Committed by Commit Bot

Add internal UI to allow us to switch query tiles servers

This allows us to switch between prod and prototype servers when needed.

BUG=1107976

Change-Id: I945fcf7824c3463bc51b74c2e9a56747a0704414
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2309812Reviewed-by: default avatardpapad <dpapad@chromium.org>
Reviewed-by: default avatarXing Liu <xingliu@chromium.org>
Reviewed-by: default avatarHesen Zhang <hesen@chromium.org>
Commit-Queue: Min Qin <qinmin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#791006}
parent d42f4d5c
......@@ -21,6 +21,14 @@
Fetcher status: <span id="fetcher-status"></span>
Database status: <span id="group-status"></span>
</div>
<h4>Server address</h4>
<div>
<Label for="base-url">Base URL:</Label>
<input type="text" id="base-url" placeholder="https://chromeupboarding-pa.googleapis.com">
<button id="prototype-server">Prototype server</button>
<button id="prod-server">Prod server</button>
<button id="set-url">Set base URL</button>
</div>
<h4>Tile data</h4>
Group info: <span id="group-info"></span>
Tile proto: <span id="tile-proto"></span>
......
......@@ -41,6 +41,18 @@ function initialize() {
browserProxy.purgeDb();
};
$('prototype-server').onclick = function() {
$('base-url').value =
'https://staging-gsaprototype-pa.sandbox.googleapis.com';
};
$('prod-server').onclick = function() {
$('base-url').value = 'https://chromeupboarding-pa.googleapis.com';
};
$('set-url').onclick = function() {
browserProxy.setServerUrl($('base-url').value);
};
// Kick off requests for the current system state.
browserProxy.getServiceStatus().then(onServiceStatusChanged);
browserProxy.getTileData().then(onTileDataAvailable);
......
......@@ -45,6 +45,12 @@ export class QueryTilesInternalsBrowserProxy {
* is fetched.
*/
getTileData() {}
/**
* Set the base URL of query tile server.
* @param {string} url of the server.
*/
setServerUrl(url) {}
}
/**
......@@ -70,6 +76,11 @@ export class QueryTilesInternalsBrowserProxyImpl {
getTileData() {
return sendWithPromise('getTileData');
}
/** @override */
setServerUrl(url) {
chrome.send('setServerUrl', [url]);
}
}
addSingletonGetter(QueryTilesInternalsBrowserProxyImpl);
......@@ -23,9 +23,8 @@ QueryTilesInternalsUIMessageHandler::QueryTilesInternalsUIMessageHandler(
DCHECK(tile_service_);
}
QueryTilesInternalsUIMessageHandler::~QueryTilesInternalsUIMessageHandler() {
tile_service_->GetLogger()->RemoveObserver(this);
}
QueryTilesInternalsUIMessageHandler::~QueryTilesInternalsUIMessageHandler() =
default;
void QueryTilesInternalsUIMessageHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback(
......@@ -47,7 +46,10 @@ void QueryTilesInternalsUIMessageHandler::RegisterMessages() {
base::Bind(&QueryTilesInternalsUIMessageHandler::HandleGetTileData,
weak_ptr_factory_.GetWeakPtr()));
tile_service_->GetLogger()->AddObserver(this);
web_ui()->RegisterMessageCallback(
"setServerUrl",
base::Bind(&QueryTilesInternalsUIMessageHandler::HandleSetServerUrl,
weak_ptr_factory_.GetWeakPtr()));
}
void QueryTilesInternalsUIMessageHandler::HandleGetTileData(
......@@ -82,17 +84,27 @@ void QueryTilesInternalsUIMessageHandler::HandlePurgeDb(
tile_service_->PurgeDb();
}
void QueryTilesInternalsUIMessageHandler::HandleSetServerUrl(
const base::ListValue* args) {
AllowJavascript();
DCHECK_EQ(args->GetList().size(), 1u) << "Missing argument server URL.";
tile_service_->SetServerUrl(args->GetList()[0].GetString());
}
void QueryTilesInternalsUIMessageHandler::OnServiceStatusChanged(
const base::Value& status) {
if (!IsJavascriptAllowed())
return;
FireWebUIListener("service-status-changed", status);
}
void QueryTilesInternalsUIMessageHandler::OnTileDataAvailable(
const base::Value& data) {
if (!IsJavascriptAllowed())
return;
FireWebUIListener("tile-data-available", data);
}
void QueryTilesInternalsUIMessageHandler::OnJavascriptAllowed() {
logger_observer_.Add(tile_service_->GetLogger());
}
void QueryTilesInternalsUIMessageHandler::OnJavascriptDisallowed() {
logger_observer_.RemoveAll();
}
......@@ -7,6 +7,7 @@
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/scoped_observer.h"
#include "components/query_tiles/logger.h"
#include "content/public/browser/web_ui_message_handler.h"
......@@ -34,14 +35,20 @@ class QueryTilesInternalsUIMessageHandler
// Logger::Observer implementation.
void OnServiceStatusChanged(const base::Value& status) override;
void OnTileDataAvailable(const base::Value& status) override;
void OnJavascriptAllowed() override;
void OnJavascriptDisallowed() override;
void HandleGetServiceStatus(const base::ListValue* args);
void HandleGetTileData(const base::ListValue* args);
void HandleStartFetch(const base::ListValue* args);
void HandlePurgeDb(const base::ListValue* args);
void HandleSetServerUrl(const base::ListValue* args);
query_tiles::TileService* tile_service_;
ScopedObserver<query_tiles::Logger, query_tiles::Logger::Observer>
logger_observer_{this};
base::WeakPtrFactory<QueryTilesInternalsUIMessageHandler> weak_ptr_factory_{
this};
};
......
......@@ -104,6 +104,15 @@ void InitAwareTileService::PurgeDb() {
}
}
void InitAwareTileService::SetServerUrl(const std::string& base_url) {
if (IsReady()) {
tile_service_->SetServerUrl(base_url);
} else if (!IsFailed()) {
MaybeCacheApiCall(base::BindOnce(&InitAwareTileService::SetServerUrl,
weak_ptr_factory_.GetWeakPtr(), base_url));
}
}
Logger* InitAwareTileService::GetLogger() {
return tile_service_->GetLogger();
}
......
......@@ -33,6 +33,7 @@ class InitAwareTileService : public TileService {
BackgroundTaskFinishedCallback callback) override;
void CancelTask() override;
void PurgeDb() override;
void SetServerUrl(const std::string& base_url) override;
Logger* GetLogger() override;
void OnTileServiceInitialized(bool success);
......
......@@ -45,6 +45,7 @@ class MockInitializableTileService : public InitializableTileService {
MOCK_METHOD(void, CancelTask, (), (override));
MOCK_METHOD(void, PurgeDb, (), (override));
MOCK_METHOD(Logger*, GetLogger, (), (override));
MOCK_METHOD(void, SetServerUrl, (const std::string&), (override));
// Callback stubs.
MOCK_METHOD(void, GetTilesCallbackStub, (TileList), ());
......
......@@ -81,8 +81,12 @@ const GURL BuildGetQueryTileURL(const GURL& base_url, const char* path) {
// static
GURL TileConfig::GetQueryTilesServerUrl() {
std::string base_url = base::GetFieldTrialParamValueByFeature(
features::kQueryTiles, kBaseURLKey);
return GetQueryTilesServerUrl(base::GetFieldTrialParamValueByFeature(
features::kQueryTiles, kBaseURLKey));
}
// static
GURL TileConfig::GetQueryTilesServerUrl(const std::string& base_url) {
GURL server_url = base_url.empty() ? GURL(kDefaultBaseURL) : GURL(base_url);
return BuildGetQueryTileURL(server_url, kDefaultGetQueryTilePath);
}
......
......@@ -52,6 +52,9 @@ class TileConfig {
// Gets the URL for the Query Tiles server.
static GURL GetQueryTilesServerUrl();
// Gets the URL for the Query Tiles server, given the server address.
static GURL GetQueryTilesServerUrl(const std::string& base_url);
// Gets whether running the background task requires unmeter network
// condition.
static bool GetIsUnMeteredNetworkRequired();
......
......@@ -148,6 +148,8 @@ class TileFetcherImpl : public TileFetcher {
url_loader_.reset();
}
void SetServerUrl(const GURL& url) override { url_ = url; }
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
// Simple URL loader to fetch proto from network.
......
......@@ -50,6 +50,9 @@ class TileFetcher {
TileFetcher(const TileFetcher& other) = delete;
TileFetcher& operator=(const TileFetcher& other) = delete;
// Sets the server URL.
virtual void SetServerUrl(const GURL& url) = 0;
protected:
TileFetcher();
};
......
......@@ -77,6 +77,12 @@ void TileServiceImpl::PurgeDb() {
scheduler_->OnDbPurged(status);
}
void TileServiceImpl::SetServerUrl(const std::string& base_url) {
if (base_url.empty())
return;
tile_fetcher_->SetServerUrl(TileConfig::GetQueryTilesServerUrl(base_url));
}
void TileServiceImpl::OnFetchFinished(
bool is_from_reduced_mode,
BackgroundTaskFinishedCallback task_finished_callback,
......
......@@ -55,6 +55,7 @@ class TileServiceImpl : public InitializableTileService,
BackgroundTaskFinishedCallback callback) override;
void CancelTask() override;
void PurgeDb() override;
void SetServerUrl(const std::string& base_url) override;
Logger* GetLogger() override;
// TileServiceScheduler::Delegate implementation.
......
......@@ -101,6 +101,8 @@ void FakeTileService::CancelTask() {}
void FakeTileService::PurgeDb() {}
void FakeTileService::SetServerUrl(const std::string& url) {}
Logger* FakeTileService::GetLogger() {
return nullptr;
}
......
......@@ -31,6 +31,7 @@ class FakeTileService : public TileService {
BackgroundTaskFinishedCallback callback) override;
void CancelTask() override;
void PurgeDb() override;
void SetServerUrl(const std::string& url) override;
Logger* GetLogger() override;
std::vector<std::unique_ptr<Tile>> tiles_;
......
......@@ -47,6 +47,9 @@ class TileService : public KeyedService, public base::SupportsUserData {
// Used for debugging and testing only. Clear everything in db.
virtual void PurgeDb() = 0;
// Used for setting the server url for test.
virtual void SetServerUrl(const std::string& base_url) = 0;
// Returns a Logger instance that is meant to be used by logging and debug UI
// components in the larger system.
virtual Logger* GetLogger() = 0;
......
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