[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/574592
Reviewed-by: Sylvain Defresne <[email protected]>
Reviewed-by: Marc Treib <[email protected]>
Commit-Queue: Colin Blundell <[email protected]>
Cr-Commit-Position: refs/heads/master@{#488274}
diff --git a/ios/chrome/browser/chrome_url_constants.cc b/ios/chrome/browser/chrome_url_constants.cc
index abc9401..3c9c345 100644
--- a/ios/chrome/browser/chrome_url_constants.cc
+++ b/ios/chrome/browser/chrome_url_constants.cc
@@ -21,6 +21,7 @@
const char kChromeUIOfflineURL[] = "chrome://offline/";
const char kChromeUIPhysicalWebURL[] = "chrome://physical-web/";
const char kChromeUISettingsURL[] = "chrome://settings/";
+const char kChromeUISuggestionsURL[] = "chrome://suggestions/";
const char kChromeUITermsURL[] = "chrome://terms/";
const char kChromeUIVersionURL[] = "chrome://version/";
@@ -43,6 +44,7 @@
const char kChromeUIPhysicalWebHost[] = "physical-web";
const char kChromeUIPolicyHost[] = "policy";
const char kChromeUISignInInternalsHost[] = "signin-internals";
+const char kChromeUISuggestionsHost[] = "suggestions";
const char kChromeUISyncInternalsHost[] = "sync-internals";
const char kChromeUITermsHost[] = "terms";
const char kChromeUIVersionHost[] = "version";
@@ -55,9 +57,9 @@
kChromeUICreditsHost, kChromeUIFlagsHost,
kChromeUIHistogramHost, kChromeUINetExportHost,
kChromeUINewTabHost, kChromeUINTPTilesInternalsHost,
- kChromeUISignInInternalsHost, kChromeUISyncInternalsHost,
- kChromeUIPhysicalWebHost, kChromeUITermsHost,
- kChromeUIVersionHost,
+ kChromeUISignInInternalsHost, kChromeUISuggestionsHost,
+ kChromeUISyncInternalsHost, kChromeUIPhysicalWebHost,
+ kChromeUITermsHost, kChromeUIVersionHost,
};
const size_t kNumberOfChromeHostURLs = arraysize(kChromeHostURLs);
diff --git a/ios/chrome/browser/chrome_url_constants.h b/ios/chrome/browser/chrome_url_constants.h
index 4377613..dfe96394 100644
--- a/ios/chrome/browser/chrome_url_constants.h
+++ b/ios/chrome/browser/chrome_url_constants.h
@@ -32,6 +32,7 @@
extern const char kChromeUIPhysicalWebURL[];
extern const char kChromeUIPopularSitesInternalsURL[];
extern const char kChromeUISettingsURL[];
+extern const char kChromeUISuggestionsURL[];
extern const char kChromeUITermsURL[];
extern const char kChromeUIVersionURL[];
@@ -56,6 +57,7 @@
extern const char kChromeUIPopularSitesInternalsHost[];
extern const char kChromeUIPolicyHost[];
extern const char kChromeUISignInInternalsHost[];
+extern const char kChromeUISuggestionsHost[];
extern const char kChromeUISyncInternalsHost[];
extern const char kChromeUITermsHost[];
extern const char kChromeUIVersionHost[];
diff --git a/ios/chrome/browser/ui/webui/BUILD.gn b/ios/chrome/browser/ui/webui/BUILD.gn
index fcda20bd..a17bac5 100644
--- a/ios/chrome/browser/ui/webui/BUILD.gn
+++ b/ios/chrome/browser/ui/webui/BUILD.gn
@@ -16,6 +16,8 @@
"ntp_tiles_internals_ui.h",
"physical_web_ui.cc",
"physical_web_ui.h",
+ "suggestions_ui.cc",
+ "suggestions_ui.h",
"terms_ui.h",
"terms_ui.mm",
"version_handler.cc",
@@ -36,6 +38,7 @@
"//components/prefs",
"//components/resources",
"//components/strings",
+ "//components/suggestions",
"//components/version_info",
"//components/version_ui",
"//google_apis",
@@ -46,6 +49,7 @@
"//ios/chrome/browser/favicon:favicon",
"//ios/chrome/browser/metrics",
"//ios/chrome/browser/ntp_tiles",
+ "//ios/chrome/browser/suggestions",
"//ios/chrome/browser/ui",
"//ios/chrome/common",
"//ios/web",
diff --git a/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm b/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm
index c5e8ea590..15c2279 100644
--- a/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm
+++ b/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm
@@ -18,6 +18,7 @@
#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/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/terms_ui.h"
#include "ios/chrome/browser/ui/webui/version_ui.h"
@@ -81,6 +82,8 @@
}
if (url_host == kChromeUISignInInternalsHost)
return &NewWebUIIOS<SignInInternalsUIIOS>;
+ if (url.host_piece() == kChromeUISuggestionsHost)
+ return &NewWebUIIOS<suggestions::SuggestionsUI>;
if (url_host == kChromeUISyncInternalsHost)
return &NewWebUIIOS<SyncInternalsUI>;
if (url_host == kChromeUITermsHost)
diff --git a/ios/chrome/browser/ui/webui/suggestions_ui.cc b/ios/chrome/browser/ui/webui/suggestions_ui.cc
new file mode 100644
index 0000000..8e3c0d70
--- /dev/null
+++ b/ios/chrome/browser/ui/webui/suggestions_ui.cc
@@ -0,0 +1,75 @@
+// 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
diff --git a/ios/chrome/browser/ui/webui/suggestions_ui.h b/ios/chrome/browser/ui/webui/suggestions_ui.h
new file mode 100644
index 0000000..ce474f0f
--- /dev/null
+++ b/ios/chrome/browser/ui/webui/suggestions_ui.h
@@ -0,0 +1,30 @@
+// 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_