Commit 3de0561a authored by gaschler's avatar gaschler Committed by Commit Bot

[NTP] Contextual in snippets-internals

Add a section to chrome://snippets-internals to allow
testing and fetching contextual suggestions.
The section is only shown when flag
ContextualSuggestionsCarousel is on.

Bug: 749988
Cq-Include-Trybots: master.tryserver.chromium.linux:closure_compilation
Change-Id: I9cd371973c6871f93996515a1ac0eab5d3067343
Reviewed-on: https://chromium-review.googlesource.com/595974
Commit-Queue: Andre Gaschler <gaschler@chromium.org>
Reviewed-by: default avatarMarc Treib <treib@chromium.org>
Cr-Commit-Position: refs/heads/master@{#491680}
parent d76e1447
......@@ -89,3 +89,9 @@ button {
max-width: 100px;
min-height: 40px;
}
#contextual-suggestions-section input {
box-sizing: border-box;
display: block;
width: 100%;
}
......@@ -12,9 +12,11 @@ found in the LICENSE file.
<link rel="stylesheet" href="chrome://resources/css/text_defaults.css">
<link rel="stylesheet" href="snippets_internals.css">
<script src="chrome://resources/js/cr.js"></script>
<script src="chrome://resources/js/load_time_data.js"></script>
<script src="chrome://resources/js/jstemplate_compiled.js"></script>
<script src="chrome://resources/js/util.js"></script>
<script src="snippets_internals.js"></script>
<script src="strings.js"></script>
<div id="info">
<div>
......@@ -224,4 +226,49 @@ found in the LICENSE file.
</div>
<div class="detail" id="content-suggestions-empty"></div>
</div>
<div id="contextual-suggestions-section" class="hidden">
<h2>Contextual Suggestions</h2>
<h3>Request for URL</h3>
<input type="url" id="contextual-url"
value="https://en.wikipedia.org/wiki/Persian_language"></input>
<button id="fetch-contextual-suggestions-button">
Fetch Contextual Suggestions
</button>
<h3>Response status</h3>
<div id="contextual-suggestions-request-result">
No request sent yet.
</div>
<h3>Contextual Suggestions response</h3>
<div id="contextual-suggestions">
<table class="section-details">
<tr jsselect="list" style="display:none">
<td class="title-link">
<span class="contextual-hidden-toggler content-suggestion-title"
jsvalues="hidden-id:id">
<span jscontent="title"></span>&gt;&gt;
</span>
<div jsvalues="id:id" class="content-suggestion-detail hidden">
<table>
<tr>
<td>ID
<td jscontent="idWithinCategory">
<tr>
<td>URL
<td><a class="url" jsvalues="href:url" jscontent="url"></a>
<tr>
<td>URL with favicon
<td>
<a class="url" jsvalues="href:urlWithFavicon"
jscontent="urlWithFavicon"></a>
<tr>
<td>Publisher name
<td jscontent="publisherName">
</table>
</div>
</table>
</div>
</div>
</div>
......@@ -44,6 +44,19 @@ cr.define('chrome.SnippetsInternals', function() {
event.preventDefault();
});
if (loadTimeData.getBoolean('contextualSuggestionsEnabled')) {
$('contextual-suggestions-section').classList.remove('hidden');
}
$('fetch-contextual-suggestions-button')
.addEventListener('click', function(event) {
let url = $('contextual-url').value;
$('contextual-suggestions-request-result').textContent =
'Fetching contextual suggestions for ' + url;
chrome.send('fetchContextualSuggestions', [url]);
event.preventDefault();
});
window.addEventListener('focus', refreshContent);
window.setInterval(refreshContent, 1000);
......@@ -54,6 +67,12 @@ cr.define('chrome.SnippetsInternals', function() {
$(propertyId).textContent = value;
}
function receiveContextualSuggestions(suggestions, status_msg) {
$('contextual-suggestions-request-result').textContent = status_msg;
displayList(
suggestions, 'contextual-suggestions', 'contextual-hidden-toggler');
}
function receiveContentSuggestions(categoriesList) {
lastSuggestions = categoriesList;
displayList(categoriesList, 'content-suggestions', 'hidden-toggler');
......@@ -184,6 +203,7 @@ cr.define('chrome.SnippetsInternals', function() {
receiveRankerDebugData: receiveRankerDebugData,
receiveLastRemoteSuggestionsBackgroundFetchTime:
receiveLastRemoteSuggestionsBackgroundFetchTime,
receiveContextualSuggestions: receiveContextualSuggestions,
};
});
......
......@@ -33,6 +33,7 @@
#include "components/ntp_snippets/category.h"
#include "components/ntp_snippets/category_info.h"
#include "components/ntp_snippets/category_rankers/category_ranker.h"
#include "components/ntp_snippets/contextual_suggestions_source.h"
#include "components/ntp_snippets/features.h"
#include "components/ntp_snippets/pref_names.h"
#include "components/ntp_snippets/remote/remote_suggestions_fetcher.h"
......@@ -43,6 +44,7 @@
#include "components/prefs/pref_service.h"
#include "components/variations/variations_associated_data.h"
#include "content/public/browser/web_ui.h"
#include "url/gurl.h"
using ntp_snippets::Category;
using ntp_snippets::CategoryInfo;
......@@ -186,7 +188,7 @@ void SnippetsInternalsMessageHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback(
"clearClassification",
base::Bind(&SnippetsInternalsMessageHandler::ClearClassification,
base::Bind(&SnippetsInternalsMessageHandler::HandleClearClassification,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
......@@ -202,9 +204,15 @@ void SnippetsInternalsMessageHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback(
"fetchRemoteSuggestionsInTheBackground",
base::Bind(&SnippetsInternalsMessageHandler::
FetchRemoteSuggestionsInTheBackground,
HandleFetchRemoteSuggestionsInTheBackground,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
"fetchContextualSuggestions",
base::Bind(
&SnippetsInternalsMessageHandler::HandleFetchContextualSuggestions,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
"pushDummySuggestionIn10Seconds",
base::Bind(&SnippetsInternalsMessageHandler::
......@@ -352,7 +360,7 @@ void SnippetsInternalsMessageHandler::HandleToggleDismissedSuggestions(
}
}
void SnippetsInternalsMessageHandler::ClearClassification(
void SnippetsInternalsMessageHandler::HandleClearClassification(
const base::ListValue* args) {
DCHECK_EQ(0u, args->GetSize());
content_suggestions_service_->user_classifier()
......@@ -360,13 +368,43 @@ void SnippetsInternalsMessageHandler::ClearClassification(
SendClassification();
}
void SnippetsInternalsMessageHandler::FetchRemoteSuggestionsInTheBackground(
const base::ListValue* args) {
void SnippetsInternalsMessageHandler::
HandleFetchRemoteSuggestionsInTheBackground(const base::ListValue* args) {
DCHECK_EQ(0u, args->GetSize());
remote_suggestions_provider_->RefetchInTheBackground(
RemoteSuggestionsProvider::FetchStatusCallback());
}
void SnippetsInternalsMessageHandler::HandleFetchContextualSuggestions(
const base::ListValue* args) {
DCHECK_EQ(1u, args->GetSize());
std::string url_str;
args->GetString(0, &url_str);
content_suggestions_service_->contextual_suggestions_source()
->FetchContextualSuggestions(
GURL(url_str),
base::BindOnce(
&SnippetsInternalsMessageHandler::OnContextualSuggestionsFetched,
weak_ptr_factory_.GetWeakPtr()));
}
void SnippetsInternalsMessageHandler::OnContextualSuggestionsFetched(
ntp_snippets::Status status,
const GURL& url,
std::vector<ntp_snippets::ContentSuggestion> suggestions) {
// Ids start in a range distinct from those created by SendContentSuggestions.
int id = 10000;
auto suggestions_list = base::MakeUnique<base::ListValue>();
for (const ContentSuggestion& suggestion : suggestions) {
suggestions_list->Append(PrepareSuggestion(suggestion, id++));
}
base::DictionaryValue result;
result.Set("list", std::move(suggestions_list));
web_ui()->CallJavascriptFunctionUnsafe(
"chrome.SnippetsInternals.receiveContextualSuggestions", result,
base::Value(static_cast<int>(status.code)));
}
void SnippetsInternalsMessageHandler::HandlePushDummySuggestionIn10Seconds(
const base::ListValue* args) {
suggestion_push_timer_.Start(
......
......@@ -15,8 +15,10 @@
#include "base/timer/timer.h"
#include "components/ntp_snippets/category.h"
#include "components/ntp_snippets/category_status.h"
#include "components/ntp_snippets/content_suggestion.h"
#include "components/ntp_snippets/content_suggestions_service.h"
#include "components/ntp_snippets/remote/remote_suggestions_provider.h"
#include "components/ntp_snippets/status.h"
#include "content/public/browser/web_ui_message_handler.h"
namespace base {
......@@ -60,8 +62,13 @@ class SnippetsInternalsMessageHandler
void HandleClearCachedSuggestions(const base::ListValue* args);
void HandleClearDismissedSuggestions(const base::ListValue* args);
void HandleToggleDismissedSuggestions(const base::ListValue* args);
void ClearClassification(const base::ListValue* args);
void FetchRemoteSuggestionsInTheBackground(const base::ListValue* args);
void HandleClearClassification(const base::ListValue* args);
void HandleFetchRemoteSuggestionsInTheBackground(const base::ListValue* args);
void HandleFetchContextualSuggestions(const base::ListValue* args);
void OnContextualSuggestionsFetched(
ntp_snippets::Status status_code,
const GURL& url,
std::vector<ntp_snippets::ContentSuggestion> suggestions);
void HandlePushDummySuggestionIn10Seconds(const base::ListValue* args);
void SendAllContent();
......
......@@ -5,6 +5,7 @@
#include "chrome/browser/ui/webui/snippets_internals_ui.h"
#include "base/memory/ptr_util.h"
#include "build/build_config.h"
#include "chrome/browser/ntp_snippets/content_suggestions_service_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/snippets_internals_message_handler.h"
......@@ -13,12 +14,24 @@
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
#if defined(OS_ANDROID)
#include "chrome/browser/android/chrome_feature_list.h"
#endif
namespace {
content::WebUIDataSource* CreateSnippetsInternalsHTMLSource() {
content::WebUIDataSource* source =
content::WebUIDataSource::Create(chrome::kChromeUISnippetsInternalsHost);
#if defined(OS_ANDROID)
source->AddBoolean("contextualSuggestionsEnabled",
base::FeatureList::IsEnabled(
chrome::android::kContextualSuggestionsCarousel));
#else
source->AddBoolean("contextualSuggestionsEnabled", false);
#endif
source->SetJsonPath("strings.js");
source->AddResourcePath("snippets_internals.js", IDR_SNIPPETS_INTERNALS_JS);
source->AddResourcePath("snippets_internals.css", IDR_SNIPPETS_INTERNALS_CSS);
source->SetDefaultResource(IDR_SNIPPETS_INTERNALS_HTML);
......
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