Commit 8bb4588a authored by Colin Blundell's avatar Colin Blundell Committed by Commit Bot

[iOS] Add chrome://suggestions WebUI

This WebUI is already present on other platforms. It will be useful for
testing upcoming refactoring of the suggestions component.

Change-Id: I303b02c04b0f90c34dd72bf0157199a60a26eb97
Reviewed-on: https://chromium-review.googlesource.com/574592Reviewed-by: default avatarSylvain Defresne <sdefresne@chromium.org>
Reviewed-by: default avatarMarc Treib <treib@chromium.org>
Commit-Queue: Colin Blundell <blundell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#488274}
parent deafcdf9
...@@ -21,6 +21,7 @@ const char kChromeUINTPTilesInternalsURL[] = "chrome://ntp-tiles-internals/"; ...@@ -21,6 +21,7 @@ const char kChromeUINTPTilesInternalsURL[] = "chrome://ntp-tiles-internals/";
const char kChromeUIOfflineURL[] = "chrome://offline/"; const char kChromeUIOfflineURL[] = "chrome://offline/";
const char kChromeUIPhysicalWebURL[] = "chrome://physical-web/"; const char kChromeUIPhysicalWebURL[] = "chrome://physical-web/";
const char kChromeUISettingsURL[] = "chrome://settings/"; const char kChromeUISettingsURL[] = "chrome://settings/";
const char kChromeUISuggestionsURL[] = "chrome://suggestions/";
const char kChromeUITermsURL[] = "chrome://terms/"; const char kChromeUITermsURL[] = "chrome://terms/";
const char kChromeUIVersionURL[] = "chrome://version/"; const char kChromeUIVersionURL[] = "chrome://version/";
...@@ -43,6 +44,7 @@ const char kChromeUIOmahaHost[] = "omaha"; ...@@ -43,6 +44,7 @@ const char kChromeUIOmahaHost[] = "omaha";
const char kChromeUIPhysicalWebHost[] = "physical-web"; const char kChromeUIPhysicalWebHost[] = "physical-web";
const char kChromeUIPolicyHost[] = "policy"; const char kChromeUIPolicyHost[] = "policy";
const char kChromeUISignInInternalsHost[] = "signin-internals"; const char kChromeUISignInInternalsHost[] = "signin-internals";
const char kChromeUISuggestionsHost[] = "suggestions";
const char kChromeUISyncInternalsHost[] = "sync-internals"; const char kChromeUISyncInternalsHost[] = "sync-internals";
const char kChromeUITermsHost[] = "terms"; const char kChromeUITermsHost[] = "terms";
const char kChromeUIVersionHost[] = "version"; const char kChromeUIVersionHost[] = "version";
...@@ -55,9 +57,9 @@ const char* const kChromeHostURLs[] = { ...@@ -55,9 +57,9 @@ const char* const kChromeHostURLs[] = {
kChromeUICreditsHost, kChromeUIFlagsHost, kChromeUICreditsHost, kChromeUIFlagsHost,
kChromeUIHistogramHost, kChromeUINetExportHost, kChromeUIHistogramHost, kChromeUINetExportHost,
kChromeUINewTabHost, kChromeUINTPTilesInternalsHost, kChromeUINewTabHost, kChromeUINTPTilesInternalsHost,
kChromeUISignInInternalsHost, kChromeUISyncInternalsHost, kChromeUISignInInternalsHost, kChromeUISuggestionsHost,
kChromeUIPhysicalWebHost, kChromeUITermsHost, kChromeUISyncInternalsHost, kChromeUIPhysicalWebHost,
kChromeUIVersionHost, kChromeUITermsHost, kChromeUIVersionHost,
}; };
const size_t kNumberOfChromeHostURLs = arraysize(kChromeHostURLs); const size_t kNumberOfChromeHostURLs = arraysize(kChromeHostURLs);
......
...@@ -32,6 +32,7 @@ extern const char kChromeUIOfflineURL[]; ...@@ -32,6 +32,7 @@ extern const char kChromeUIOfflineURL[];
extern const char kChromeUIPhysicalWebURL[]; extern const char kChromeUIPhysicalWebURL[];
extern const char kChromeUIPopularSitesInternalsURL[]; extern const char kChromeUIPopularSitesInternalsURL[];
extern const char kChromeUISettingsURL[]; extern const char kChromeUISettingsURL[];
extern const char kChromeUISuggestionsURL[];
extern const char kChromeUITermsURL[]; extern const char kChromeUITermsURL[];
extern const char kChromeUIVersionURL[]; extern const char kChromeUIVersionURL[];
...@@ -56,6 +57,7 @@ extern const char kChromeUIPhysicalWebHost[]; ...@@ -56,6 +57,7 @@ extern const char kChromeUIPhysicalWebHost[];
extern const char kChromeUIPopularSitesInternalsHost[]; extern const char kChromeUIPopularSitesInternalsHost[];
extern const char kChromeUIPolicyHost[]; extern const char kChromeUIPolicyHost[];
extern const char kChromeUISignInInternalsHost[]; extern const char kChromeUISignInInternalsHost[];
extern const char kChromeUISuggestionsHost[];
extern const char kChromeUISyncInternalsHost[]; extern const char kChromeUISyncInternalsHost[];
extern const char kChromeUITermsHost[]; extern const char kChromeUITermsHost[];
extern const char kChromeUIVersionHost[]; extern const char kChromeUIVersionHost[];
......
...@@ -16,6 +16,8 @@ source_set("webui") { ...@@ -16,6 +16,8 @@ source_set("webui") {
"ntp_tiles_internals_ui.h", "ntp_tiles_internals_ui.h",
"physical_web_ui.cc", "physical_web_ui.cc",
"physical_web_ui.h", "physical_web_ui.h",
"suggestions_ui.cc",
"suggestions_ui.h",
"terms_ui.h", "terms_ui.h",
"terms_ui.mm", "terms_ui.mm",
"version_handler.cc", "version_handler.cc",
...@@ -36,6 +38,7 @@ source_set("webui") { ...@@ -36,6 +38,7 @@ source_set("webui") {
"//components/prefs", "//components/prefs",
"//components/resources", "//components/resources",
"//components/strings", "//components/strings",
"//components/suggestions",
"//components/version_info", "//components/version_info",
"//components/version_ui", "//components/version_ui",
"//google_apis", "//google_apis",
...@@ -46,6 +49,7 @@ source_set("webui") { ...@@ -46,6 +49,7 @@ source_set("webui") {
"//ios/chrome/browser/favicon:favicon", "//ios/chrome/browser/favicon:favicon",
"//ios/chrome/browser/metrics", "//ios/chrome/browser/metrics",
"//ios/chrome/browser/ntp_tiles", "//ios/chrome/browser/ntp_tiles",
"//ios/chrome/browser/suggestions",
"//ios/chrome/browser/ui", "//ios/chrome/browser/ui",
"//ios/chrome/common", "//ios/chrome/common",
"//ios/web", "//ios/web",
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "ios/chrome/browser/ui/webui/omaha_ui.h" #include "ios/chrome/browser/ui/webui/omaha_ui.h"
#include "ios/chrome/browser/ui/webui/physical_web_ui.h" #include "ios/chrome/browser/ui/webui/physical_web_ui.h"
#include "ios/chrome/browser/ui/webui/signin_internals_ui_ios.h" #include "ios/chrome/browser/ui/webui/signin_internals_ui_ios.h"
#include "ios/chrome/browser/ui/webui/suggestions_ui.h"
#include "ios/chrome/browser/ui/webui/sync_internals/sync_internals_ui.h" #include "ios/chrome/browser/ui/webui/sync_internals/sync_internals_ui.h"
#include "ios/chrome/browser/ui/webui/terms_ui.h" #include "ios/chrome/browser/ui/webui/terms_ui.h"
#include "ios/chrome/browser/ui/webui/version_ui.h" #include "ios/chrome/browser/ui/webui/version_ui.h"
...@@ -81,6 +82,8 @@ WebUIIOSFactoryFunction GetWebUIIOSFactoryFunction(WebUIIOS* web_ui, ...@@ -81,6 +82,8 @@ WebUIIOSFactoryFunction GetWebUIIOSFactoryFunction(WebUIIOS* web_ui,
} }
if (url_host == kChromeUISignInInternalsHost) if (url_host == kChromeUISignInInternalsHost)
return &NewWebUIIOS<SignInInternalsUIIOS>; return &NewWebUIIOS<SignInInternalsUIIOS>;
if (url.host_piece() == kChromeUISuggestionsHost)
return &NewWebUIIOS<suggestions::SuggestionsUI>;
if (url_host == kChromeUISyncInternalsHost) if (url_host == kChromeUISyncInternalsHost)
return &NewWebUIIOS<SyncInternalsUI>; return &NewWebUIIOS<SyncInternalsUI>;
if (url_host == kChromeUITermsHost) if (url_host == kChromeUITermsHost)
......
// Copyright 2017 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 "ios/chrome/browser/ui/webui/suggestions_ui.h"
#include <map>
#include <string>
#include "components/suggestions/webui/suggestions_source.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/chrome_url_constants.h"
#include "ios/chrome/browser/suggestions/suggestions_service_factory.h"
#include "ios/web/public/url_data_source_ios.h"
namespace suggestions {
namespace {
// Glues a SuggestionsSource instance to //ios/chrome.
class SuggestionsSourceWrapper : public web::URLDataSourceIOS {
public:
explicit SuggestionsSourceWrapper(SuggestionsService* suggestions_service);
// web::URLDataSourceIOS implementation.
std::string GetSource() const override;
void StartDataRequest(
const std::string& path,
const web::URLDataSourceIOS::GotDataCallback& callback) override;
std::string GetMimeType(const std::string& path) const override;
private:
~SuggestionsSourceWrapper() override;
SuggestionsSource suggestions_source_;
DISALLOW_COPY_AND_ASSIGN(SuggestionsSourceWrapper);
};
SuggestionsSourceWrapper::SuggestionsSourceWrapper(
SuggestionsService* suggestions_service)
: suggestions_source_(suggestions_service, kChromeUISuggestionsURL) {}
SuggestionsSourceWrapper::~SuggestionsSourceWrapper() {}
std::string SuggestionsSourceWrapper::GetSource() const {
return kChromeUISuggestionsHost;
}
void SuggestionsSourceWrapper::StartDataRequest(
const std::string& path,
const web::URLDataSourceIOS::GotDataCallback& callback) {
suggestions_source_.StartDataRequest(path, callback);
}
std::string SuggestionsSourceWrapper::GetMimeType(
const std::string& path) const {
return "text/html";
}
} // namespace
SuggestionsUI::SuggestionsUI(web::WebUIIOS* web_ui)
: web::WebUIIOSController(web_ui) {
ios::ChromeBrowserState* browser_state =
ios::ChromeBrowserState::FromWebUIIOS(web_ui);
web::URLDataSourceIOS::Add(
browser_state,
new SuggestionsSourceWrapper(
SuggestionsServiceFactory::GetForBrowserState(browser_state)));
}
SuggestionsUI::~SuggestionsUI() {}
} // namespace suggestions
// Copyright 2017 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 IOS_CHROME_BROWSER_UI_WEBUI_SUGGESTIONS_UI_H_
#define IOS_CHROME_BROWSER_UI_WEBUI_SUGGESTIONS_UI_H_
#include "base/macros.h"
#include "ios/web/public/webui/web_ui_ios_controller.h"
namespace web {
class WebUIIOS;
}
namespace suggestions {
// The WebUIController for chrome://suggestions. Renders a webpage to list
// SuggestionsService data.
class SuggestionsUI : public web::WebUIIOSController {
public:
explicit SuggestionsUI(web::WebUIIOS* web_ui);
~SuggestionsUI() override;
private:
DISALLOW_COPY_AND_ASSIGN(SuggestionsUI);
};
} // namespace suggestions
#endif // IOS_CHROME_BROWSER_UI_WEBUI_SUGGESTIONS_UI_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