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 @@ ...@@ -21,6 +21,14 @@
Fetcher status: <span id="fetcher-status"></span> Fetcher status: <span id="fetcher-status"></span>
Database status: <span id="group-status"></span> Database status: <span id="group-status"></span>
</div> </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> <h4>Tile data</h4>
Group info: <span id="group-info"></span> Group info: <span id="group-info"></span>
Tile proto: <span id="tile-proto"></span> Tile proto: <span id="tile-proto"></span>
......
...@@ -41,6 +41,18 @@ function initialize() { ...@@ -41,6 +41,18 @@ function initialize() {
browserProxy.purgeDb(); 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. // Kick off requests for the current system state.
browserProxy.getServiceStatus().then(onServiceStatusChanged); browserProxy.getServiceStatus().then(onServiceStatusChanged);
browserProxy.getTileData().then(onTileDataAvailable); browserProxy.getTileData().then(onTileDataAvailable);
......
...@@ -45,6 +45,12 @@ export class QueryTilesInternalsBrowserProxy { ...@@ -45,6 +45,12 @@ export class QueryTilesInternalsBrowserProxy {
* is fetched. * is fetched.
*/ */
getTileData() {} getTileData() {}
/**
* Set the base URL of query tile server.
* @param {string} url of the server.
*/
setServerUrl(url) {}
} }
/** /**
...@@ -70,6 +76,11 @@ export class QueryTilesInternalsBrowserProxyImpl { ...@@ -70,6 +76,11 @@ export class QueryTilesInternalsBrowserProxyImpl {
getTileData() { getTileData() {
return sendWithPromise('getTileData'); return sendWithPromise('getTileData');
} }
/** @override */
setServerUrl(url) {
chrome.send('setServerUrl', [url]);
}
} }
addSingletonGetter(QueryTilesInternalsBrowserProxyImpl); addSingletonGetter(QueryTilesInternalsBrowserProxyImpl);
...@@ -23,9 +23,8 @@ QueryTilesInternalsUIMessageHandler::QueryTilesInternalsUIMessageHandler( ...@@ -23,9 +23,8 @@ QueryTilesInternalsUIMessageHandler::QueryTilesInternalsUIMessageHandler(
DCHECK(tile_service_); DCHECK(tile_service_);
} }
QueryTilesInternalsUIMessageHandler::~QueryTilesInternalsUIMessageHandler() { QueryTilesInternalsUIMessageHandler::~QueryTilesInternalsUIMessageHandler() =
tile_service_->GetLogger()->RemoveObserver(this); default;
}
void QueryTilesInternalsUIMessageHandler::RegisterMessages() { void QueryTilesInternalsUIMessageHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback( web_ui()->RegisterMessageCallback(
...@@ -47,7 +46,10 @@ void QueryTilesInternalsUIMessageHandler::RegisterMessages() { ...@@ -47,7 +46,10 @@ void QueryTilesInternalsUIMessageHandler::RegisterMessages() {
base::Bind(&QueryTilesInternalsUIMessageHandler::HandleGetTileData, base::Bind(&QueryTilesInternalsUIMessageHandler::HandleGetTileData,
weak_ptr_factory_.GetWeakPtr())); weak_ptr_factory_.GetWeakPtr()));
tile_service_->GetLogger()->AddObserver(this); web_ui()->RegisterMessageCallback(
"setServerUrl",
base::Bind(&QueryTilesInternalsUIMessageHandler::HandleSetServerUrl,
weak_ptr_factory_.GetWeakPtr()));
} }
void QueryTilesInternalsUIMessageHandler::HandleGetTileData( void QueryTilesInternalsUIMessageHandler::HandleGetTileData(
...@@ -82,17 +84,27 @@ void QueryTilesInternalsUIMessageHandler::HandlePurgeDb( ...@@ -82,17 +84,27 @@ void QueryTilesInternalsUIMessageHandler::HandlePurgeDb(
tile_service_->PurgeDb(); 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( void QueryTilesInternalsUIMessageHandler::OnServiceStatusChanged(
const base::Value& status) { const base::Value& status) {
if (!IsJavascriptAllowed())
return;
FireWebUIListener("service-status-changed", status); FireWebUIListener("service-status-changed", status);
} }
void QueryTilesInternalsUIMessageHandler::OnTileDataAvailable( void QueryTilesInternalsUIMessageHandler::OnTileDataAvailable(
const base::Value& data) { const base::Value& data) {
if (!IsJavascriptAllowed())
return;
FireWebUIListener("tile-data-available", data); FireWebUIListener("tile-data-available", data);
} }
void QueryTilesInternalsUIMessageHandler::OnJavascriptAllowed() {
logger_observer_.Add(tile_service_->GetLogger());
}
void QueryTilesInternalsUIMessageHandler::OnJavascriptDisallowed() {
logger_observer_.RemoveAll();
}
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/scoped_observer.h"
#include "components/query_tiles/logger.h" #include "components/query_tiles/logger.h"
#include "content/public/browser/web_ui_message_handler.h" #include "content/public/browser/web_ui_message_handler.h"
...@@ -34,14 +35,20 @@ class QueryTilesInternalsUIMessageHandler ...@@ -34,14 +35,20 @@ class QueryTilesInternalsUIMessageHandler
// Logger::Observer implementation. // Logger::Observer implementation.
void OnServiceStatusChanged(const base::Value& status) override; void OnServiceStatusChanged(const base::Value& status) override;
void OnTileDataAvailable(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 HandleGetServiceStatus(const base::ListValue* args);
void HandleGetTileData(const base::ListValue* args); void HandleGetTileData(const base::ListValue* args);
void HandleStartFetch(const base::ListValue* args); void HandleStartFetch(const base::ListValue* args);
void HandlePurgeDb(const base::ListValue* args); void HandlePurgeDb(const base::ListValue* args);
void HandleSetServerUrl(const base::ListValue* args);
query_tiles::TileService* tile_service_; query_tiles::TileService* tile_service_;
ScopedObserver<query_tiles::Logger, query_tiles::Logger::Observer>
logger_observer_{this};
base::WeakPtrFactory<QueryTilesInternalsUIMessageHandler> weak_ptr_factory_{ base::WeakPtrFactory<QueryTilesInternalsUIMessageHandler> weak_ptr_factory_{
this}; this};
}; };
......
...@@ -104,6 +104,15 @@ void InitAwareTileService::PurgeDb() { ...@@ -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() { Logger* InitAwareTileService::GetLogger() {
return tile_service_->GetLogger(); return tile_service_->GetLogger();
} }
......
...@@ -33,6 +33,7 @@ class InitAwareTileService : public TileService { ...@@ -33,6 +33,7 @@ class InitAwareTileService : public TileService {
BackgroundTaskFinishedCallback callback) override; BackgroundTaskFinishedCallback callback) override;
void CancelTask() override; void CancelTask() override;
void PurgeDb() override; void PurgeDb() override;
void SetServerUrl(const std::string& base_url) override;
Logger* GetLogger() override; Logger* GetLogger() override;
void OnTileServiceInitialized(bool success); void OnTileServiceInitialized(bool success);
......
...@@ -45,6 +45,7 @@ class MockInitializableTileService : public InitializableTileService { ...@@ -45,6 +45,7 @@ class MockInitializableTileService : public InitializableTileService {
MOCK_METHOD(void, CancelTask, (), (override)); MOCK_METHOD(void, CancelTask, (), (override));
MOCK_METHOD(void, PurgeDb, (), (override)); MOCK_METHOD(void, PurgeDb, (), (override));
MOCK_METHOD(Logger*, GetLogger, (), (override)); MOCK_METHOD(Logger*, GetLogger, (), (override));
MOCK_METHOD(void, SetServerUrl, (const std::string&), (override));
// Callback stubs. // Callback stubs.
MOCK_METHOD(void, GetTilesCallbackStub, (TileList), ()); MOCK_METHOD(void, GetTilesCallbackStub, (TileList), ());
......
...@@ -81,8 +81,12 @@ const GURL BuildGetQueryTileURL(const GURL& base_url, const char* path) { ...@@ -81,8 +81,12 @@ const GURL BuildGetQueryTileURL(const GURL& base_url, const char* path) {
// static // static
GURL TileConfig::GetQueryTilesServerUrl() { GURL TileConfig::GetQueryTilesServerUrl() {
std::string base_url = base::GetFieldTrialParamValueByFeature( return GetQueryTilesServerUrl(base::GetFieldTrialParamValueByFeature(
features::kQueryTiles, kBaseURLKey); features::kQueryTiles, kBaseURLKey));
}
// static
GURL TileConfig::GetQueryTilesServerUrl(const std::string& base_url) {
GURL server_url = base_url.empty() ? GURL(kDefaultBaseURL) : GURL(base_url); GURL server_url = base_url.empty() ? GURL(kDefaultBaseURL) : GURL(base_url);
return BuildGetQueryTileURL(server_url, kDefaultGetQueryTilePath); return BuildGetQueryTileURL(server_url, kDefaultGetQueryTilePath);
} }
......
...@@ -52,6 +52,9 @@ class TileConfig { ...@@ -52,6 +52,9 @@ class TileConfig {
// Gets the URL for the Query Tiles server. // Gets the URL for the Query Tiles server.
static GURL GetQueryTilesServerUrl(); 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 // Gets whether running the background task requires unmeter network
// condition. // condition.
static bool GetIsUnMeteredNetworkRequired(); static bool GetIsUnMeteredNetworkRequired();
......
...@@ -148,6 +148,8 @@ class TileFetcherImpl : public TileFetcher { ...@@ -148,6 +148,8 @@ class TileFetcherImpl : public TileFetcher {
url_loader_.reset(); url_loader_.reset();
} }
void SetServerUrl(const GURL& url) override { url_ = url; }
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
// Simple URL loader to fetch proto from network. // Simple URL loader to fetch proto from network.
......
...@@ -50,6 +50,9 @@ class TileFetcher { ...@@ -50,6 +50,9 @@ class TileFetcher {
TileFetcher(const TileFetcher& other) = delete; TileFetcher(const TileFetcher& other) = delete;
TileFetcher& operator=(const TileFetcher& other) = delete; TileFetcher& operator=(const TileFetcher& other) = delete;
// Sets the server URL.
virtual void SetServerUrl(const GURL& url) = 0;
protected: protected:
TileFetcher(); TileFetcher();
}; };
......
...@@ -77,6 +77,12 @@ void TileServiceImpl::PurgeDb() { ...@@ -77,6 +77,12 @@ void TileServiceImpl::PurgeDb() {
scheduler_->OnDbPurged(status); 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( void TileServiceImpl::OnFetchFinished(
bool is_from_reduced_mode, bool is_from_reduced_mode,
BackgroundTaskFinishedCallback task_finished_callback, BackgroundTaskFinishedCallback task_finished_callback,
......
...@@ -55,6 +55,7 @@ class TileServiceImpl : public InitializableTileService, ...@@ -55,6 +55,7 @@ class TileServiceImpl : public InitializableTileService,
BackgroundTaskFinishedCallback callback) override; BackgroundTaskFinishedCallback callback) override;
void CancelTask() override; void CancelTask() override;
void PurgeDb() override; void PurgeDb() override;
void SetServerUrl(const std::string& base_url) override;
Logger* GetLogger() override; Logger* GetLogger() override;
// TileServiceScheduler::Delegate implementation. // TileServiceScheduler::Delegate implementation.
......
...@@ -101,6 +101,8 @@ void FakeTileService::CancelTask() {} ...@@ -101,6 +101,8 @@ void FakeTileService::CancelTask() {}
void FakeTileService::PurgeDb() {} void FakeTileService::PurgeDb() {}
void FakeTileService::SetServerUrl(const std::string& url) {}
Logger* FakeTileService::GetLogger() { Logger* FakeTileService::GetLogger() {
return nullptr; return nullptr;
} }
......
...@@ -31,6 +31,7 @@ class FakeTileService : public TileService { ...@@ -31,6 +31,7 @@ class FakeTileService : public TileService {
BackgroundTaskFinishedCallback callback) override; BackgroundTaskFinishedCallback callback) override;
void CancelTask() override; void CancelTask() override;
void PurgeDb() override; void PurgeDb() override;
void SetServerUrl(const std::string& url) override;
Logger* GetLogger() override; Logger* GetLogger() override;
std::vector<std::unique_ptr<Tile>> tiles_; std::vector<std::unique_ptr<Tile>> tiles_;
......
...@@ -47,6 +47,9 @@ class TileService : public KeyedService, public base::SupportsUserData { ...@@ -47,6 +47,9 @@ class TileService : public KeyedService, public base::SupportsUserData {
// Used for debugging and testing only. Clear everything in db. // Used for debugging and testing only. Clear everything in db.
virtual void PurgeDb() = 0; 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 // Returns a Logger instance that is meant to be used by logging and debug UI
// components in the larger system. // components in the larger system.
virtual Logger* GetLogger() = 0; 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