summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordbeam <dbeam@chromium.org>2015-05-20 16:42:55 -0700
committerCommit bot <commit-bot@chromium.org>2015-05-20 23:43:21 +0000
commit1fc345cd960f7efd4e6b07d1f050615239d82d60 (patch)
tree0b8c86ef055c88e269e544b7b54b9ef311ef8a9c
parent6e2954bf357c78f079d8c3ef7cc48bb81abca028 (diff)
downloadchromium_src-1fc345cd960f7efd4e6b07d1f050615239d82d60.zip
chromium_src-1fc345cd960f7efd4e6b07d1f050615239d82d60.tar.gz
chromium_src-1fc345cd960f7efd4e6b07d1f050615239d82d60.tar.bz2
NTP Zombie Code Slayer Part IV: Most Visited
This is where things get complicated. NTP4 had a most visited pane. It showed your top sites. So does the current NTP; so I'm trying to remove everything that deals with most visited tiles on NTP4 without accidentally breaking the same named thing on the current NTP. Here's what used to exist that I'm trying to remove: http://bostandjiev.com/Content/Google/chrome.jpg Here's what currently exists that I'm trying not to break: http://cdn.ghacks.net/wp-content/uploads/2013/04/chrome-new-tab-page.jpg BUG=329637 Review URL: https://codereview.chromium.org/1129903008 Cr-Commit-Position: refs/heads/master@{#330845}
-rw-r--r--chrome/browser/extensions/extension_service.cc2
-rw-r--r--chrome/browser/history/DEPS1
-rw-r--r--chrome/browser/history/top_sites_factory.cc6
-rw-r--r--chrome/browser/history/top_sites_factory.h2
-rw-r--r--chrome/browser/resources/ntp4/apps_page.js7
-rw-r--r--chrome/browser/resources/ntp4/compiled_resources.gyp1
-rw-r--r--chrome/browser/resources/ntp4/most_visited_page.css186
-rw-r--r--chrome/browser/resources/ntp4/most_visited_page.js495
-rw-r--r--chrome/browser/resources/ntp4/new_tab.html2
-rw-r--r--chrome/browser/resources/ntp4/new_tab.js49
-rw-r--r--chrome/browser/resources/ntp4/new_tab_theme.css12
-rw-r--r--chrome/browser/resources/ntp4/page_list_view.js52
-rw-r--r--chrome/browser/search/instant_service.cc2
-rw-r--r--chrome/browser/search/thumbnail_source.cc (renamed from chrome/browser/ui/webui/ntp/thumbnail_source.cc)2
-rw-r--r--chrome/browser/search/thumbnail_source.h (renamed from chrome/browser/ui/webui/ntp/thumbnail_source.h)6
-rw-r--r--chrome/browser/ui/webui/app_launcher_page_ui.cc1
-rw-r--r--chrome/browser/ui/webui/ntp/most_visited_browsertest.cc29
-rw-r--r--chrome/browser/ui/webui/ntp/most_visited_handler.cc294
-rw-r--r--chrome/browser/ui/webui/ntp/most_visited_handler.h120
-rw-r--r--chrome/browser/ui/webui/ntp/new_tab_page_handler.cc24
-rw-r--r--chrome/browser/ui/webui/ntp/new_tab_page_handler.h4
-rw-r--r--chrome/browser/ui/webui/ntp/new_tab_ui.cc3
-rw-r--r--chrome/browser/ui/webui/ntp/ntp_resource_cache.cc12
-rw-r--r--chrome/browser/ui/webui/ntp/ntp_resource_cache.h6
-rw-r--r--chrome/chrome_browser.gypi2
-rw-r--r--chrome/chrome_browser_ui.gypi4
-rw-r--r--chrome/chrome_tests.gypi1
-rw-r--r--chrome/test/base/web_ui_browser_test.h6
28 files changed, 29 insertions, 1302 deletions
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index c066fd0..7ac99c1 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -46,9 +46,9 @@
#include "chrome/browser/extensions/updater/extension_updater.h"
#include "chrome/browser/google/google_brand.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/search/thumbnail_source.h"
#include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
#include "chrome/browser/ui/webui/favicon_source.h"
-#include "chrome/browser/ui/webui/ntp/thumbnail_source.h"
#include "chrome/browser/ui/webui/theme_source.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/crash_keys.h"
diff --git a/chrome/browser/history/DEPS b/chrome/browser/history/DEPS
index 9ebef2a..fc79fa5 100644
--- a/chrome/browser/history/DEPS
+++ b/chrome/browser/history/DEPS
@@ -53,6 +53,7 @@ specific_include_rules = {
"+chrome/browser/ui/profile_error_dialog.h",
"+components/bookmarks/browser",
"+components/keyed_service/content",
+ "+components/pref_registry",
],
# Those files will move to //components/history/content/browser and thus
# can depend on //content even indirectly.
diff --git a/chrome/browser/history/top_sites_factory.cc b/chrome/browser/history/top_sites_factory.cc
index 0c56d8c..114d9c9 100644
--- a/chrome/browser/history/top_sites_factory.cc
+++ b/chrome/browser/history/top_sites_factory.cc
@@ -17,6 +17,7 @@
#include "components/history/core/browser/history_constants.h"
#include "components/history/core/browser/top_sites_impl.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "components/pref_registry/pref_registry_syncable.h"
#include "content/public/browser/browser_thread.h"
#include "grit/theme_resources.h"
#include "ui/base/l10n/l10n_util.h"
@@ -115,6 +116,11 @@ scoped_refptr<RefcountedKeyedService> TopSitesFactory::BuildServiceInstanceFor(
return BuildTopSites(context, prepopulated_pages);
}
+void TopSitesFactory::RegisterProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) {
+ registry->RegisterDictionaryPref(prefs::kNtpMostVisitedURLsBlacklist);
+}
+
bool TopSitesFactory::ServiceIsNULLWhileTesting() const {
return true;
}
diff --git a/chrome/browser/history/top_sites_factory.h b/chrome/browser/history/top_sites_factory.h
index 0f1e811..8794a11 100644
--- a/chrome/browser/history/top_sites_factory.h
+++ b/chrome/browser/history/top_sites_factory.h
@@ -47,6 +47,8 @@ class TopSitesFactory : public RefcountedBrowserContextKeyedServiceFactory {
// Overridden from BrowserContextKeyedServiceFactory.
scoped_refptr<RefcountedKeyedService> BuildServiceInstanceFor(
content::BrowserContext* context) const override;
+ void RegisterProfilePrefs(
+ user_prefs::PrefRegistrySyncable* registry) override;
bool ServiceIsNULLWhileTesting() const override;
DISALLOW_COPY_AND_ASSIGN(TopSitesFactory);
diff --git a/chrome/browser/resources/ntp4/apps_page.js b/chrome/browser/resources/ntp4/apps_page.js
index bdbefcb..6fbff6b 100644
--- a/chrome/browser/resources/ntp4/apps_page.js
+++ b/chrome/browser/resources/ntp4/apps_page.js
@@ -20,8 +20,8 @@ cr.define('ntp', function() {
var DRAG_SOURCE = {
SAME_APPS_PANE: 0,
OTHER_APPS_PANE: 1,
- MOST_VISITED_PANE: 2,
- BOOKMARKS_PANE: 3,
+ MOST_VISITED_PANE: 2, // Deprecated.
+ BOOKMARKS_PANE: 3, // Deprecated.
OUTSIDE_NTP: 4
};
var DRAG_SOURCE_LIMIT = DRAG_SOURCE.OUTSIDE_NTP + 1;
@@ -683,9 +683,6 @@ cr.define('ntp', function() {
originalPage.fireRemovedEvent(currentlyDraggingTile, index, true);
this.fireAddedEvent(currentlyDraggingTile, index, true);
}
- } else if (currentlyDraggingTile.querySelector('.most-visited')) {
- this.generateAppForLink(tileContents.data);
- sourceId = DRAG_SOURCE.MOST_VISITED_PANE;
}
} else {
this.addOutsideData_(dataTransfer);
diff --git a/chrome/browser/resources/ntp4/compiled_resources.gyp b/chrome/browser/resources/ntp4/compiled_resources.gyp
index 7a0a597..ce10d49 100644
--- a/chrome/browser/resources/ntp4/compiled_resources.gyp
+++ b/chrome/browser/resources/ntp4/compiled_resources.gyp
@@ -33,7 +33,6 @@
'logging.js',
'tile_page.js',
'dot_list.js',
- 'most_visited_page.js',
'trash.js',
'page_switcher.js',
'page_list_view.js',
diff --git a/chrome/browser/resources/ntp4/most_visited_page.css b/chrome/browser/resources/ntp4/most_visited_page.css
deleted file mode 100644
index 0bc0abc..0000000
--- a/chrome/browser/resources/ntp4/most_visited_page.css
+++ /dev/null
@@ -1,186 +0,0 @@
-/* Copyright (c) 2012 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. */
-
-.most-visited {
- position: absolute;
- z-index: 0;
-}
-
-.most-visited {
- -webkit-box-orient: vertical;
- display: -webkit-box;
- position: absolute;
- text-decoration: none;
-}
-
-.most-visited:focus {
- outline: none;
-}
-
-.fills-parent {
- bottom: 0;
- display: -webkit-box;
- left: 0;
- position: absolute;
- right: 0;
- top: 0;
-}
-
-/* filler mode: hide everything except the thumbnail --- leave a grey rectangle
- * in its place. */
-.filler * {
- visibility: hidden;
-}
-
-.filler {
- pointer-events: none;
-}
-
-.most-visited .close-button {
- -webkit-transition: opacity 150ms;
- opacity: 0;
- position: absolute;
- right: 0;
- top: 0;
- z-index: 5;
-}
-
-html[dir=rtl] .most-visited .close-button {
- left: 0;
- right: auto;
-}
-
-.most-visited:hover .close-button {
- -webkit-transition-delay: 500ms;
- opacity: 1;
-}
-
-.most-visited .close-button:hover {
- -webkit-transition: none;
-}
-
-.most-visited .favicon {
- -webkit-margin-start: 5px;
- background: no-repeat left 50%;
- background-size: 16px;
- bottom: 7px;
- box-sizing: border-box;
- display: block;
- height: 16px;
- position: absolute;
- width: 16px;
-}
-
-html[dir='rtl'] .most-visited .favicon {
- background-position-x: right;
-}
-
-.most-visited .color-stripe {
- border-bottom-left-radius: 3px 3px;
- border-bottom-right-radius: 3px 3px;
- /* Matches height of title. */
- bottom: 23px;
- height: 3px;
- /* Matches padding-top of the title. */
- margin-bottom: 8px;
- position: absolute;
- width: 100%;
- z-index: 10;
-}
-
-.most-visited .title {
- display: block;
- height: 23px;
- overflow: hidden;
- padding-top: 8px;
- text-align: center;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.thumbnail {
- -webkit-transition: opacity 150ms;
- background: no-repeat;
- /* This shows for missing thumbnails. */
- background-color: #eee;
- background-size: 100%;
- border-radius: 3px;
- /* These max dimensions are not necessary, as the sizing logic in the .js
- * should be sufficient, but they're here for extra insurance. We never want
- * to scale a thumbnail larger than this size. */
- max-height: 132px;
- max-width: 212px;
-}
-
-.filler .thumbnail {
- /* TODO(estade): there seems to be a webkit bug where this border is not
- * always removed when it should be. Investigate. */
- border: 1px solid;
- visibility: visible;
-}
-
-.thumbnail-shield {
- background: -webkit-linear-gradient(rgba(255, 255, 255, 0),
- rgba(255, 255, 255, 0) 50%,
- rgba(255, 255, 255, 0.9));
- border-radius: 3px;
-}
-
-/* TODO(dbeam): Remove this when printing of -webkit-linear-gradient() works. */
-@media print {
- .thumbnail-shield {
- background: none;
- }
-}
-
-.most-visited:focus .thumbnail,
-.most-visited:hover .thumbnail {
- opacity: 0.95;
-}
-
-.most-visited:focus .thumbnail-shield,
-.most-visited:hover .thumbnail-shield,
-.most-visited:active .thumbnail-shield {
- background: -webkit-linear-gradient(rgba(255, 255, 255, 0),
- rgba(255, 255, 255, 0) 80%,
- rgba(255, 255, 255, 0.9));
-}
-
-/* The thumbnail gets lighter when clicked, but not when the click is on the
- * close button. */
-.most-visited:active .close-button:not(:active) + .thumbnail {
- opacity: 0.9;
-}
-
-/* The thumbnail gets a shadow when clicked, but not when the click is on the
- * close button. */
-.most-visited:active .close-button:not(:active) + .thumbnail .thumbnail-shield {
- box-shadow: inset 0 1px 10px rgba(0, 0, 0, 0.2);
-}
-
-.thumbnail-wrapper {
- -webkit-box-flex: 1;
- -webkit-transition: background-color 150ms;
- border: 1px solid transparent;
- border-radius: 3px;
- display: block;
- position: relative;
- z-index: 5;
-}
-
-.filler .thumbnail-wrapper {
- visibility: visible;
-}
-
-/* 'finishing-drag' is the state we are in after dropping on the trash can.
- * Override opacity of the tile to 1, so that the new tile animation
- * occurs simultaneously with the trash animation. */
-.tile.dragging.finishing-drag {
- opacity: 1;
-}
-
-/* Don't display the new tile until there's something to show. */
-.blacklisted {
- opacity: 0;
-}
diff --git a/chrome/browser/resources/ntp4/most_visited_page.js b/chrome/browser/resources/ntp4/most_visited_page.js
deleted file mode 100644
index 4f6cbd1..0000000
--- a/chrome/browser/resources/ntp4/most_visited_page.js
+++ /dev/null
@@ -1,495 +0,0 @@
-// Copyright (c) 2012 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.
-
-cr.define('ntp', function() {
- 'use strict';
-
- var TilePage = ntp.TilePage;
-
- /**
- * A counter for generating unique tile IDs.
- */
- var tileID = 0;
-
- /**
- * Creates a new Most Visited object for tiling.
- * @constructor
- * @extends {HTMLAnchorElement}
- */
- function MostVisited() {
- var el = cr.doc.createElement('a');
- el.__proto__ = MostVisited.prototype;
- el.initialize();
-
- return el;
- }
-
- MostVisited.prototype = {
- __proto__: HTMLAnchorElement.prototype,
-
- initialize: function() {
- this.reset();
-
- this.addEventListener('click', this.handleClick_);
- this.addEventListener('keydown', this.handleKeyDown_);
- this.addEventListener('mouseover', this.handleMouseOver_);
- },
-
- get index() {
- assert(this.tile);
- return this.tile.index;
- },
-
- get data() {
- return this.data_;
- },
-
- /**
- * Clears the DOM hierarchy for this node, setting it back to the default
- * for a blank thumbnail.
- */
- reset: function() {
- this.className = 'most-visited filler real';
- this.innerHTML =
- '<span class="thumbnail-wrapper fills-parent">' +
- '<div class="close-button"></div>' +
- '<span class="thumbnail fills-parent">' +
- // thumbnail-shield provides a gradient fade effect.
- '<div class="thumbnail-shield fills-parent"></div>' +
- '</span>' +
- '<span class="favicon"></span>' +
- '</span>' +
- '<div class="color-stripe"></div>' +
- '<span class="title"></span>';
-
- this.querySelector('.close-button').title =
- loadTimeData.getString('removethumbnailtooltip');
-
- this.tabIndex = -1;
- this.data_ = null;
- this.removeAttribute('id');
- this.title = '';
- },
-
- /**
- * Update the appearance of this tile according to |data|.
- * @param {PageData} data A dictionary of relevant data for the page.
- */
- updateForData: function(data) {
- if (this.classList.contains('blacklisted') && data) {
- // Animate appearance of new tile.
- this.classList.add('new-tile-contents');
- }
- this.classList.remove('blacklisted');
-
- if (!data || data.filler) {
- if (this.data_)
- this.reset();
- return;
- }
-
- var id = tileID++;
- this.id = 'most-visited-tile-' + id;
- this.data_ = data;
- this.classList.add('focusable');
-
- var faviconDiv = this.querySelector('.favicon');
- faviconDiv.style.backgroundImage = getFaviconImageSet(data.url);
-
- // The favicon should have the same dominant color regardless of the
- // device pixel ratio the favicon is requested for.
- chrome.send('getFaviconDominantColor',
- [getFaviconUrlForCurrentDevicePixelRatio(data.url), this.id]);
-
- var title = this.querySelector('.title');
- title.textContent = data.title;
- title.dir = data.direction;
-
- // Sets the tooltip.
- this.title = data.title;
-
- var thumbnailUrl = 'chrome://thumb/' + data.url;
- this.querySelector('.thumbnail').style.backgroundImage =
- url(thumbnailUrl);
-
- this.href = data.url;
-
- this.classList.remove('filler');
- },
-
- /**
- * Sets the color of the favicon dominant color bar.
- * @param {string} color The css-parsable value for the color.
- */
- set stripeColor(color) {
- this.querySelector('.color-stripe').style.backgroundColor = color;
- },
-
- /**
- * Handles a click on the tile.
- * @param {Event} e The click event.
- */
- handleClick_: function(e) {
- if (e.target.classList.contains('close-button')) {
- this.blacklist_();
- e.preventDefault();
- } else {
- ntp.logTimeToClick('MostVisited');
- // Records an app launch from the most visited page (Chrome will decide
- // whether the url is an app). TODO(estade): this only works for clicks;
- // other actions like "open in new tab" from the context menu won't be
- // recorded. Can this be fixed?
- chrome.send('recordAppLaunchByURL',
- [encodeURIComponent(this.href),
- ntp.APP_LAUNCH.NTP_MOST_VISITED]);
- // Records the index of this tile.
- chrome.send('metricsHandler:recordInHistogram',
- ['NewTabPage.MostVisited', this.index, 8]);
- // Records the action. This will be available as a time-stamped stream
- // server-side and can be used to compute time-to-long-dwell.
- chrome.send('metricsHandler:recordAction', ['MostVisited_Clicked']);
- chrome.send('mostVisitedAction',
- [ntp.NtpFollowAction.CLICKED_TILE]);
- }
- },
-
- /**
- * Allow blacklisting most visited site using the keyboard.
- */
- handleKeyDown_: function(e) {
- if (!cr.isMac && e.keyCode == 46 || // Del
- cr.isMac && e.metaKey && e.keyCode == 8) { // Cmd + Backspace
- this.blacklist_();
- }
- },
-
- /**
- * The mouse has entered a Most Visited tile div. Only log the first
- * mouseover event. By doing this we solve the issue with the mouseover
- * event listener that bubbles up to the parent, which would cause it to
- * fire multiple times even if the mouse stays within one tile.
- */
- handleMouseOver_: function(e) {
- var self = this;
- var ancestor = findAncestor(e.relatedTarget, function(node) {
- return node == self;
- });
- // If ancestor is null, mouse is entering the parent element.
- if (ancestor == null)
- chrome.send('metricsHandler:logMouseover');
- },
-
- /**
- * Permanently removes a page from Most Visited.
- */
- blacklist_: function() {
- this.showUndoNotification_();
- chrome.send('blacklistURLFromMostVisited', [this.data_.url]);
- this.reset();
- chrome.send('getMostVisited');
- this.classList.add('blacklisted');
- },
-
- showUndoNotification_: function() {
- var data = this.data_;
- var self = this;
- var doUndo = function() {
- chrome.send('removeURLsFromMostVisitedBlacklist', [data.url]);
- self.updateForData(data);
- };
-
- var undo = {
- action: doUndo,
- text: loadTimeData.getString('undothumbnailremove'),
- };
-
- var undoAll = {
- action: function() {
- chrome.send('clearMostVisitedURLsBlacklist');
- },
- text: loadTimeData.getString('restoreThumbnailsShort'),
- };
-
- ntp.showNotification(
- loadTimeData.getString('thumbnailremovednotification'),
- [undo, undoAll]);
- },
-
- /**
- * Set the size and position of the most visited tile.
- * @param {number} size The total size of |this|.
- * @param {number} x The x-position.
- * @param {number} y The y-position.
- * animate.
- */
- setBounds: function(size, x, y) {
- this.style.width = toCssPx(size);
- this.style.height = toCssPx(heightForWidth(size));
-
- this.style.left = toCssPx(x);
- this.style.right = toCssPx(x);
- this.style.top = toCssPx(y);
- },
-
- /**
- * Returns whether this element can be 'removed' from chrome (i.e. whether
- * the user can drag it onto the trash and expect something to happen).
- * @return {boolean} True, since most visited pages can always be
- * blacklisted.
- */
- canBeRemoved: function() {
- return true;
- },
-
- /**
- * Removes this element from chrome, i.e. blacklists it.
- */
- removeFromChrome: function() {
- this.blacklist_();
- this.parentNode.classList.add('finishing-drag');
- },
-
- /**
- * Called when a drag of this tile has ended (after all animations have
- * finished).
- */
- finalizeDrag: function() {
- this.parentNode.classList.remove('finishing-drag');
- },
-
- /**
- * Called when a drag is starting on the tile. Updates dataTransfer with
- * data for this tile (for dragging outside of the NTP).
- */
- setDragData: function(dataTransfer) {
- dataTransfer.setData('Text', this.data_.title);
- dataTransfer.setData('URL', this.data_.url);
- },
- };
-
- var mostVisitedPageGridValues = {
- // The fewest tiles we will show in a row.
- minColCount: 2,
- // The most tiles we will show in a row.
- maxColCount: 4,
-
- // The smallest a tile can be.
- minTileWidth: 122,
- // The biggest a tile can be. 212 (max thumbnail width) + 2.
- maxTileWidth: 214,
-
- // The padding between tiles, as a fraction of the tile width.
- tileSpacingFraction: 1 / 8,
- };
- TilePage.initGridValues(mostVisitedPageGridValues);
-
- /**
- * Calculates the height for a Most Visited tile for a given width. The size
- * is based on the thumbnail, which should have a 212:132 ratio.
- * @return {number} The height.
- */
- function heightForWidth(width) {
- // The 2s are for borders, the 31 is for the title.
- return (width - 2) * 132 / 212 + 2 + 31;
- }
-
- var THUMBNAIL_COUNT = 8;
-
- /**
- * Creates a new MostVisitedPage object.
- * @constructor
- * @extends {ntp.TilePage}
- */
- function MostVisitedPage() {
- var el = new TilePage(mostVisitedPageGridValues);
- el.__proto__ = MostVisitedPage.prototype;
- el.initialize();
-
- return el;
- }
-
- MostVisitedPage.prototype = {
- __proto__: TilePage.prototype,
-
- initialize: function() {
- this.classList.add('most-visited-page');
- this.data_ = null;
- this.mostVisitedTiles_ = this.getElementsByClassName('most-visited real');
-
- this.addEventListener('carddeselected', this.handleCardDeselected_);
- this.addEventListener('cardselected', this.handleCardSelected_);
- },
-
- /**
- * Create blank (filler) tiles.
- * @private
- */
- createTiles_: function() {
- for (var i = 0; i < THUMBNAIL_COUNT; i++) {
- this.appendTile(new MostVisited(), false);
- }
- },
-
- /**
- * Update the tiles after a change to |data_|.
- */
- updateTiles_: function() {
- for (var i = 0; i < THUMBNAIL_COUNT; i++) {
- var page = this.data_[i];
- var tile = this.mostVisitedTiles_[i];
-
- if (i >= this.data_.length)
- tile.reset();
- else
- tile.updateForData(page);
- }
- },
-
- /**
- * Handles the 'card deselected' event (i.e. the user clicked to another
- * pane).
- * @param {Event} e The CardChanged event.
- */
- handleCardDeselected_: function(e) {
- if (!document.documentElement.classList.contains('starting-up')) {
- chrome.send('mostVisitedAction',
- [ntp.NtpFollowAction.CLICKED_OTHER_NTP_PANE]);
- }
- },
-
- /**
- * Handles the 'card selected' event (i.e. the user clicked to select the
- * Most Visited pane).
- * @param {Event} e The CardChanged event.
- */
- handleCardSelected_: function(e) {
- if (!document.documentElement.classList.contains('starting-up'))
- chrome.send('mostVisitedSelected');
- },
-
- /**
- * Array of most visited data objects.
- * @type {Array<PageData>}
- */
- get data() {
- return this.data_;
- },
- set data(data) {
- var startTime = Date.now();
-
- // The first time data is set, create the tiles.
- if (!this.data_) {
- this.createTiles_();
- this.data_ = data.slice(0, THUMBNAIL_COUNT);
- } else {
- this.data_ = refreshData(this.data_, data);
- }
-
- this.updateTiles_();
- this.updateFocusableElement();
- logEvent('mostVisited.layout: ' + (Date.now() - startTime));
- },
-
- /** @override */
- shouldAcceptDrag: function(e) {
- return false;
- },
-
- /** @override */
- heightForWidth: heightForWidth,
- };
-
- /**
- * Executed once the NTP has loaded. Checks if the Most Visited pane is
- * shown or not. If it is shown, the 'mostVisitedSelected' message is sent
- * to the C++ code, to record the fact that the user has seen this pane.
- */
- MostVisitedPage.onLoaded = function() {
- if (ntp.getCardSlider() &&
- ntp.getCardSlider().currentCardValue &&
- ntp.getCardSlider().currentCardValue.classList
- .contains('most-visited-page')) {
- chrome.send('mostVisitedSelected');
- }
- };
-
- /**
- * We've gotten additional Most Visited data. Update our old data with the
- * new data. The ordering of the new data is not important, except when a
- * page is pinned. Thus we try to minimize re-ordering.
- * @param {Array} oldData The current Most Visited page list.
- * @param {Array} newData The new Most Visited page list.
- * @return {Array} The merged page list that should replace the current page
- * list.
- */
- function refreshData(oldData, newData) {
- oldData = oldData.slice(0, THUMBNAIL_COUNT);
- newData = newData.slice(0, THUMBNAIL_COUNT);
-
- // Copy over pinned sites directly.
- for (var j = 0; j < newData.length; j++) {
- if (newData[j].pinned) {
- oldData[j] = newData[j];
- // Mark the entry as 'updated' so we don't try to update again.
- oldData[j].updated = true;
- // Mark the newData page as 'used' so we don't try to re-use it.
- newData[j].used = true;
- }
- }
-
- // Look through old pages; if they exist in the newData list, keep them
- // where they are.
- for (var i = 0; i < oldData.length; i++) {
- if (!oldData[i] || oldData[i].updated)
- continue;
-
- for (var j = 0; j < newData.length; j++) {
- if (newData[j].used)
- continue;
-
- if (newData[j].url == oldData[i].url) {
- // The background image and other data may have changed.
- oldData[i] = newData[j];
- oldData[i].updated = true;
- newData[j].used = true;
- break;
- }
- }
- }
-
- // Look through old pages that haven't been updated yet; replace them.
- for (var i = 0; i < oldData.length; i++) {
- if (oldData[i] && oldData[i].updated)
- continue;
-
- for (var j = 0; j < newData.length; j++) {
- if (newData[j].used)
- continue;
-
- oldData[i] = newData[j];
- oldData[i].updated = true;
- newData[j].used = true;
- break;
- }
-
- if (oldData[i] && !oldData[i].updated)
- oldData[i] = null;
- }
-
- // Clear 'updated' flags so this function will work next time it's called.
- for (var i = 0; i < THUMBNAIL_COUNT; i++) {
- if (oldData[i])
- oldData[i].updated = false;
- }
-
- return oldData;
- };
-
- return {
- MostVisitedPage: MostVisitedPage,
- refreshData: refreshData,
- };
-});
-
-document.addEventListener('ntpLoaded', ntp.MostVisitedPage.onLoaded);
diff --git a/chrome/browser/resources/ntp4/new_tab.html b/chrome/browser/resources/ntp4/new_tab.html
index cc0e668..9bceb41 100644
--- a/chrome/browser/resources/ntp4/new_tab.html
+++ b/chrome/browser/resources/ntp4/new_tab.html
@@ -27,7 +27,6 @@
<link rel="stylesheet" href="../../../../ui/webui/resources/css/trash.css">
<link rel="stylesheet" href="../../../../ui/webui/resources/css/widgets.css">
<link rel="stylesheet" href="apps_page.css">
-<link rel="stylesheet" href="most_visited_page.css">
<link rel="stylesheet" href="nav_dot.css">
<link rel="stylesheet" href="new_tab.css">
<link rel="stylesheet" href="footer_menu.css">
@@ -58,7 +57,6 @@
<script src="tile_page.js"></script>
<script src="apps_page.js"></script>
<script src="dot_list.js"></script>
-<script src="most_visited_page.js"></script>
<script src="trash.js"></script>
<script src="page_list_view.js"></script>
<script src="page_switcher.js"></script>
diff --git a/chrome/browser/resources/ntp4/new_tab.js b/chrome/browser/resources/ntp4/new_tab.js
index b127c69..678be69 100644
--- a/chrome/browser/resources/ntp4/new_tab.js
+++ b/chrome/browser/resources/ntp4/new_tab.js
@@ -8,15 +8,6 @@
* browsers. For now this is still a prototype.
*/
-/**
- * @typedef {{direction: string,
- * filler: (boolean|undefined),
- * title: string,
- * url: string}}
- * @see chrome/browser/ui/webui/ntp/most_visited_handler.cc
- */
-var PageData;
-
// Use an anonymous function to enable strict mode just for this file (which
// will be concatenated with other files when embedded in Chrome
cr.define('ntp', function() {
@@ -120,8 +111,6 @@ cr.define('ntp', function() {
*/
function onLoad() {
sectionsToWaitFor = 0;
- if (loadTimeData.getBoolean('showMostvisited'))
- sectionsToWaitFor++;
if (loadTimeData.getBoolean('showApps')) {
sectionsToWaitFor++;
if (loadTimeData.getBoolean('showAppLauncherPromo')) {
@@ -142,18 +131,6 @@ cr.define('ntp', function() {
notificationContainer.addEventListener(
'webkitTransitionEnd', onNotificationTransitionEnd);
- if (loadTimeData.getBoolean('showMostvisited')) {
- var mostVisited = new ntp.MostVisitedPage();
- // Move the footer into the most visited page if we are in "bare minimum"
- // mode.
- if (document.body.classList.contains('bare-minimum'))
- mostVisited.appendFooter(getRequiredElement('footer'));
- newTabView.appendTilePage(mostVisited,
- loadTimeData.getString('mostvisited'),
- false);
- chrome.send('getMostVisited');
- }
-
if (!loadTimeData.getBoolean('showWebStoreIcon')) {
var webStoreIcon = $('chrome-web-store-link');
// Not all versions of the NTP have a footer, so this may not exist.
@@ -326,14 +303,11 @@ cr.define('ntp', function() {
* its length may be measured and the nav dots sized accordingly.
*/
function measureNavDots() {
- var pxWidth = measureNavDot('appDefaultPageName');
- if (loadTimeData.getBoolean('showMostvisited'))
- pxWidth = Math.max(measureNavDot('mostvisited'), pxWidth);
-
var styleElement = document.createElement('style');
styleElement.type = 'text/css';
// max-width is used because if we run out of space, the nav dots will be
// shrunk.
+ var pxWidth = measureNavDot('appDefaultPageName');
styleElement.textContent = '.dot { max-width: ' + pxWidth + 'px; }';
document.querySelector('head').appendChild(styleElement);
}
@@ -507,15 +481,6 @@ cr.define('ntp', function() {
}
/**
- * @param {Array<PageData>} data
- * @param {boolean} hasBlacklistedUrls
- */
- function setMostVisitedPages(data, hasBlacklistedUrls) {
- newTabView.mostVisitedPage.data = data;
- cr.dispatchSimpleEvent(document, 'sectionready', true, true);
- }
-
- /**
* Set the dominant color for a node. This will be called in response to
* getFaviconDominantColor. The node represented by |id| better have a setter
* for stripeColor.
@@ -574,16 +539,6 @@ cr.define('ntp', function() {
}
/**
- * Logs the time to click for the specified item.
- * @param {string} item The item to log the time-to-click.
- */
- function logTimeToClick(item) {
- var timeToClick = Date.now() - startTime;
- chrome.send('logTimeToClick',
- ['NewTabPage.TimeToClick' + item, timeToClick]);
- }
-
- /**
* Wrappers to forward the callback to corresponding PageListView member.
*/
@@ -706,12 +661,10 @@ cr.define('ntp', function() {
getCardSlider: getCardSlider,
onLoad: onLoad,
leaveRearrangeMode: leaveRearrangeMode,
- logTimeToClick: logTimeToClick,
NtpFollowAction: NtpFollowAction,
saveAppPageName: saveAppPageName,
setAppToBeHighlighted: setAppToBeHighlighted,
setBookmarkBarAttached: setBookmarkBarAttached,
- setMostVisitedPages: setMostVisitedPages,
setFaviconDominantColor: setFaviconDominantColor,
showNotification: showNotification,
themeChanged: themeChanged,
diff --git a/chrome/browser/resources/ntp4/new_tab_theme.css b/chrome/browser/resources/ntp4/new_tab_theme.css
index a7b1888..52281e8 100644
--- a/chrome/browser/resources/ntp4/new_tab_theme.css
+++ b/chrome/browser/resources/ntp4/new_tab_theme.css
@@ -90,18 +90,6 @@ body {
background-color: rgba($23, 0.85); /* COLOR_NTP_TEXT */
}
-/* Most Visited ***************************************************************/
-
-.most-visited,
-.most-visited > .title {
- color: $8; /* COLOR_NTP_TEXT */
-}
-
-.most-visited:focus:not(.filler) .thumbnail-wrapper,
-.most-visited:hover:not(.filler) .thumbnail-wrapper {
- background-color: $6; /* COLOR_NTP_HEADER */
-}
-
.thumbnail-wrapper {
/* This shows through at the (rounded) thumbnail's corners. */
background-color: $11; /* COLOR_NTP_SECTION_BORDER */
diff --git a/chrome/browser/resources/ntp4/page_list_view.js b/chrome/browser/resources/ntp4/page_list_view.js
index fa1513b..a13a424 100644
--- a/chrome/browser/resources/ntp4/page_list_view.js
+++ b/chrome/browser/resources/ntp4/page_list_view.js
@@ -86,12 +86,6 @@ cr.define('ntp', function() {
appsPages: undefined,
/**
- * The Most Visited page.
- * @type {!Element|undefined}
- */
- mostVisitedPage: undefined,
-
- /**
* The 'dots-list' element.
* @type {!Element|undefined}
*/
@@ -174,20 +168,13 @@ cr.define('ntp', function() {
this.shownPage = loadTimeData.getInteger('shown_page_type');
this.shownPageIndex = loadTimeData.getInteger('shown_page_index');
- if (loadTimeData.getBoolean('showApps')) {
- // Request data on the apps so we can fill them in.
- // Note that this is kicked off asynchronously. 'getAppsCallback' will
- // be invoked at some point after this function returns.
- chrome.send('getApps');
- } else {
- // No apps page.
- if (this.shownPage == loadTimeData.getInteger('apps_page_id')) {
- this.setShownPage_(
- loadTimeData.getInteger('most_visited_page_id'), 0);
- }
+ // TODO(dbeam): remove showApps and everything that says if (apps).
+ assert(loadTimeData.getBoolean('showApps'));
- document.body.classList.add('bare-minimum');
- }
+ // Request data on the apps so we can fill them in.
+ // Note that this is kicked off asynchronously. 'getAppsCallback' will
+ // be invoked at some point after this function returns.
+ chrome.send('getApps');
document.addEventListener('keydown', this.onDocKeyDown_.bind(this));
@@ -259,14 +246,6 @@ cr.define('ntp', function() {
this.cardSlider.appendCard(page);
}
- // Remember special MostVisitedPage.
- if (typeof ntp.MostVisitedPage != 'undefined' &&
- page instanceof ntp.MostVisitedPage) {
- assert(this.tilePages.length == 1,
- 'MostVisitedPage should be added as first tile page');
- this.mostVisitedPage = page;
- }
-
// If we're appending an AppsPage and it's a temporary page, animate it.
var animate = page instanceof ntp.AppsPage &&
page.classList.contains('temporary');
@@ -489,11 +468,10 @@ cr.define('ntp', function() {
$(data.apps[i].id).appData = data.apps[i];
}
- // Set the App dot names. Skip the first dot (Most Visited).
+ // Set the App dot names.
var dots = this.dotList.getElementsByClassName('dot');
- var start = this.mostVisitedPage ? 1 : 0;
- for (var i = start; i < dots.length; ++i) {
- dots[i].displayTitle = data.appPageNames[i - start] || '';
+ for (var i = 0; i < dots.length; ++i) {
+ dots[i].displayTitle = data.appPageNames[i] || '';
}
},
@@ -525,20 +503,11 @@ cr.define('ntp', function() {
this.tilePages.length - 1));
this.cardSlider.setCards(Array.prototype.slice.call(this.tilePages),
pageNo);
- if (this.shownPage == loadTimeData.getInteger('most_visited_page_id')) {
- if (this.mostVisitedPage)
- this.cardSlider.selectCardByValue(this.mostVisitedPage);
- else
- this.shownPage = loadTimeData.getInteger('apps_page_id');
- }
if (this.shownPage == loadTimeData.getInteger('apps_page_id') &&
loadTimeData.getBoolean('showApps')) {
this.cardSlider.selectCardByValue(
this.appsPages[Math.min(this.shownPageIndex,
this.appsPages.length - 1)]);
- } else if (this.mostVisitedPage) {
- this.shownPage = loadTimeData.getInteger('most_visited_page_id');
- this.cardSlider.selectCardByValue(this.mostVisitedPage);
}
},
@@ -665,9 +634,6 @@ cr.define('ntp', function() {
if (page.classList.contains('apps-page')) {
this.setShownPage_(loadTimeData.getInteger('apps_page_id'),
this.getAppsPageIndex(page));
- } else if (page.classList.contains('most-visited-page')) {
- this.setShownPage_(
- loadTimeData.getInteger('most_visited_page_id'), 0);
} else {
console.error('unknown page selected');
}
diff --git a/chrome/browser/search/instant_service.cc b/chrome/browser/search/instant_service.cc
index 573c415..986808d7 100644
--- a/chrome/browser/search/instant_service.cc
+++ b/chrome/browser/search/instant_service.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/search/most_visited_iframe_source.h"
#include "chrome/browser/search/search.h"
#include "chrome/browser/search/suggestions/suggestions_source.h"
+#include "chrome/browser/search/thumbnail_source.h"
#include "chrome/browser/search_engines/template_url_service_factory.h"
#include "chrome/browser/search_engines/ui_thread_search_terms_data.h"
#include "chrome/browser/thumbnails/thumbnail_list_source.h"
@@ -21,7 +22,6 @@
#include "chrome/browser/ui/webui/fallback_icon_source.h"
#include "chrome/browser/ui/webui/favicon_source.h"
#include "chrome/browser/ui/webui/large_icon_source.h"
-#include "chrome/browser/ui/webui/ntp/thumbnail_source.h"
#include "chrome/browser/ui/webui/theme_source.h"
#include "chrome/common/render_messages.h"
#include "components/favicon/core/fallback_icon_service.h"
diff --git a/chrome/browser/ui/webui/ntp/thumbnail_source.cc b/chrome/browser/search/thumbnail_source.cc
index 15fb29a..e2023c2 100644
--- a/chrome/browser/ui/webui/ntp/thumbnail_source.cc
+++ b/chrome/browser/search/thumbnail_source.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/ui/webui/ntp/thumbnail_source.h"
+#include "chrome/browser/search/thumbnail_source.h"
#include "base/callback.h"
#include "base/memory/ref_counted_memory.h"
diff --git a/chrome/browser/ui/webui/ntp/thumbnail_source.h b/chrome/browser/search/thumbnail_source.h
index 7a331686..4bf5072 100644
--- a/chrome/browser/ui/webui/ntp/thumbnail_source.h
+++ b/chrome/browser/search/thumbnail_source.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_UI_WEBUI_NTP_THUMBNAIL_SOURCE_H_
-#define CHROME_BROWSER_UI_WEBUI_NTP_THUMBNAIL_SOURCE_H_
+#ifndef CHROME_BROWSER_SEARCH_THUMBNAIL_SOURCE_H_
+#define CHROME_BROWSER_SEARCH_THUMBNAIL_SOURCE_H_
#include <string>
@@ -62,4 +62,4 @@ class ThumbnailSource : public content::URLDataSource {
DISALLOW_COPY_AND_ASSIGN(ThumbnailSource);
};
-#endif // CHROME_BROWSER_UI_WEBUI_NTP_THUMBNAIL_SOURCE_H_
+#endif // CHROME_BROWSER_SEARCH_THUMBNAIL_SOURCE_H_
diff --git a/chrome/browser/ui/webui/app_launcher_page_ui.cc b/chrome/browser/ui/webui/app_launcher_page_ui.cc
index c95cdf2..3476b90 100644
--- a/chrome/browser/ui/webui/app_launcher_page_ui.cc
+++ b/chrome/browser/ui/webui/app_launcher_page_ui.cc
@@ -99,7 +99,6 @@ void AppLauncherPageUI::HTMLSource::StartDataRequest(
DCHECK_CURRENTLY_ON(BrowserThread::UI);
NTPResourceCache* resource = AppResourceCacheFactory::GetForProfile(profile_);
- resource->set_should_show_most_visited_page(false);
resource->set_should_show_other_devices_menu(false);
content::RenderProcessHost* render_host =
diff --git a/chrome/browser/ui/webui/ntp/most_visited_browsertest.cc b/chrome/browser/ui/webui/ntp/most_visited_browsertest.cc
deleted file mode 100644
index 363473d..0000000
--- a/chrome/browser/ui/webui/ntp/most_visited_browsertest.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2011 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 "base/files/file_path.h"
-#include "chrome/common/url_constants.h"
-#include "chrome/test/base/ui_test_utils.h"
-#include "chrome/test/base/web_ui_browser_test.h"
-#include "url/gurl.h"
-
-class MostVisitedWebUITest : public WebUIBrowserTest {
- public:
- ~MostVisitedWebUITest() override {}
-
- void SetUpInProcessBrowserTestFixture() override {
- WebUIBrowserTest::SetUpInProcessBrowserTestFixture();
- AddLibrary(base::FilePath(FILE_PATH_LITERAL("most_visited_page_test.js")));
- }
-
- void SetUpOnMainThread() override {
- WebUIBrowserTest::SetUpOnMainThread();
- ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL));
- }
-};
-
-// TODO(samarth): delete along with the rest of the NTP4 code.
-WEB_UI_UNITTEST_F(MostVisitedWebUITest, DISABLED_refreshDataBasic);
-WEB_UI_UNITTEST_F(MostVisitedWebUITest, DISABLED_refreshDataOrdering);
-WEB_UI_UNITTEST_F(MostVisitedWebUITest, DISABLED_refreshDataPinning);
diff --git a/chrome/browser/ui/webui/ntp/most_visited_handler.cc b/chrome/browser/ui/webui/ntp/most_visited_handler.cc
deleted file mode 100644
index 9deda8c..0000000
--- a/chrome/browser/ui/webui/ntp/most_visited_handler.cc
+++ /dev/null
@@ -1,294 +0,0 @@
-// Copyright (c) 2012 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 "chrome/browser/ui/webui/ntp/most_visited_handler.h"
-
-#include <set>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/command_line.h"
-#include "base/md5.h"
-#include "base/memory/scoped_vector.h"
-#include "base/memory/singleton.h"
-#include "base/metrics/histogram.h"
-#include "base/prefs/pref_service.h"
-#include "base/prefs/scoped_user_pref_update.h"
-#include "base/strings/string16.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/threading/thread.h"
-#include "base/values.h"
-#include "chrome/browser/favicon/fallback_icon_service_factory.h"
-#include "chrome/browser/favicon/large_icon_service_factory.h"
-#include "chrome/browser/history/top_sites_factory.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/thumbnails/thumbnail_list_source.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/browser/ui/tabs/tab_strip_model_utils.h"
-#include "chrome/browser/ui/webui/fallback_icon_source.h"
-#include "chrome/browser/ui/webui/favicon_source.h"
-#include "chrome/browser/ui/webui/large_icon_source.h"
-#include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
-#include "chrome/browser/ui/webui/ntp/ntp_stats.h"
-#include "chrome/browser/ui/webui/ntp/thumbnail_source.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/common/url_constants.h"
-#include "components/favicon/core/fallback_icon_service.h"
-#include "components/favicon/core/large_icon_service.h"
-#include "components/history/core/browser/page_usage_data.h"
-#include "components/history/core/browser/top_sites.h"
-#include "components/keyed_service/core/service_access_type.h"
-#include "components/pref_registry/pref_registry_syncable.h"
-#include "content/public/browser/navigation_controller.h"
-#include "content/public/browser/navigation_entry.h"
-#include "content/public/browser/url_data_source.h"
-#include "content/public/browser/user_metrics.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/browser/web_ui.h"
-#include "url/gurl.h"
-
-using base::UserMetricsAction;
-
-MostVisitedHandler::MostVisitedHandler()
- : scoped_observer_(this),
- got_first_most_visited_request_(false),
- most_visited_viewed_(false),
- user_action_logged_(false),
- weak_ptr_factory_(this) {
-}
-
-MostVisitedHandler::~MostVisitedHandler() {
- if (!user_action_logged_ && most_visited_viewed_) {
- const GURL ntp_url = GURL(chrome::kChromeUINewTabURL);
- int action_id = NTP_FOLLOW_ACTION_OTHER;
- content::NavigationEntry* entry =
- web_ui()->GetWebContents()->GetController().GetLastCommittedEntry();
- if (entry && (entry->GetURL() != ntp_url)) {
- action_id =
- ui::PageTransitionStripQualifier(entry->GetTransitionType());
- }
-
- UMA_HISTOGRAM_ENUMERATION("NewTabPage.MostVisitedAction", action_id,
- NUM_NTP_FOLLOW_ACTIONS);
- }
-}
-
-void MostVisitedHandler::RegisterMessages() {
- Profile* profile = Profile::FromWebUI(web_ui());
- // Set up our sources for thumbnail and favicon data.
- content::URLDataSource::Add(profile, new ThumbnailSource(profile, false));
- content::URLDataSource::Add(profile, new ThumbnailSource(profile, true));
-
- // Set up our sources for top-sites data.
- content::URLDataSource::Add(profile, new ThumbnailListSource(profile));
-
- favicon::FallbackIconService* fallback_icon_service =
- FallbackIconServiceFactory::GetForBrowserContext(profile);
- favicon::LargeIconService* large_icon_service =
- LargeIconServiceFactory::GetForBrowserContext(profile);
-
- // Register chrome://fallback-icon as a data source for fallback icons.
- content::URLDataSource::Add(profile,
- new FallbackIconSource(fallback_icon_service));
-
- // Register chrome://favicon as a data source for favicons.
- content::URLDataSource::Add(
- profile, new FaviconSource(profile, FaviconSource::FAVICON));
-
- // Register chrome://large-icon as a data source for large icons.
- content::URLDataSource::Add(
- profile, new LargeIconSource(fallback_icon_service, large_icon_service));
-
- scoped_refptr<history::TopSites> top_sites =
- TopSitesFactory::GetForProfile(profile);
- if (top_sites) {
- // TopSites updates itself after a delay. This is especially noticable when
- // your profile is empty. Ask TopSites to update itself when we're about to
- // show the new tab page.
- top_sites->SyncWithHistory();
-
- // Register as TopSitesObserver so that we can update ourselves when the
- // TopSites changes.
- scoped_observer_.Add(top_sites.get());
- }
-
- // We pre-emptively make a fetch for the most visited pages so we have the
- // results sooner.
- StartQueryForMostVisited();
-
- web_ui()->RegisterMessageCallback("getMostVisited",
- base::Bind(&MostVisitedHandler::HandleGetMostVisited,
- base::Unretained(this)));
-
- // Register ourselves for any most-visited item blacklisting.
- web_ui()->RegisterMessageCallback("blacklistURLFromMostVisited",
- base::Bind(&MostVisitedHandler::HandleBlacklistUrl,
- base::Unretained(this)));
- web_ui()->RegisterMessageCallback("removeURLsFromMostVisitedBlacklist",
- base::Bind(&MostVisitedHandler::HandleRemoveUrlsFromBlacklist,
- base::Unretained(this)));
- web_ui()->RegisterMessageCallback("clearMostVisitedURLsBlacklist",
- base::Bind(&MostVisitedHandler::HandleClearBlacklist,
- base::Unretained(this)));
- web_ui()->RegisterMessageCallback("mostVisitedAction",
- base::Bind(&MostVisitedHandler::HandleMostVisitedAction,
- base::Unretained(this)));
- web_ui()->RegisterMessageCallback("mostVisitedSelected",
- base::Bind(&MostVisitedHandler::HandleMostVisitedSelected,
- base::Unretained(this)));
-}
-
-void MostVisitedHandler::HandleGetMostVisited(const base::ListValue* args) {
- if (!got_first_most_visited_request_) {
- // If our initial data is already here, return it.
- SendPagesValue();
- got_first_most_visited_request_ = true;
- } else {
- StartQueryForMostVisited();
- }
-}
-
-void MostVisitedHandler::SendPagesValue() {
- if (pages_value_) {
- Profile* profile = Profile::FromWebUI(web_ui());
- const base::DictionaryValue* url_blacklist =
- profile->GetPrefs()->GetDictionary(prefs::kNtpMostVisitedURLsBlacklist);
- bool has_blacklisted_urls = !url_blacklist->empty();
- scoped_refptr<history::TopSites> ts =
- TopSitesFactory::GetForProfile(profile);
- if (ts)
- has_blacklisted_urls = ts->HasBlacklistedItems();
-
- base::FundamentalValue has_blacklisted_urls_value(has_blacklisted_urls);
- web_ui()->CallJavascriptFunction("ntp.setMostVisitedPages",
- *pages_value_,
- has_blacklisted_urls_value);
- pages_value_.reset();
- }
-}
-
-void MostVisitedHandler::StartQueryForMostVisited() {
- scoped_refptr<history::TopSites> ts =
- TopSitesFactory::GetForProfile(Profile::FromWebUI(web_ui()));
- if (ts) {
- ts->GetMostVisitedURLs(
- base::Bind(&MostVisitedHandler::OnMostVisitedUrlsAvailable,
- weak_ptr_factory_.GetWeakPtr()), false);
- }
-}
-
-void MostVisitedHandler::HandleBlacklistUrl(const base::ListValue* args) {
- std::string url = base::UTF16ToUTF8(ExtractStringValue(args));
- BlacklistUrl(GURL(url));
-}
-
-void MostVisitedHandler::HandleRemoveUrlsFromBlacklist(
- const base::ListValue* args) {
- DCHECK(args->GetSize() != 0);
-
- for (base::ListValue::const_iterator iter = args->begin();
- iter != args->end(); ++iter) {
- std::string url;
- bool r = (*iter)->GetAsString(&url);
- if (!r) {
- NOTREACHED();
- return;
- }
- content::RecordAction(UserMetricsAction("MostVisited_UrlRemoved"));
- scoped_refptr<history::TopSites> ts =
- TopSitesFactory::GetForProfile(Profile::FromWebUI(web_ui()));
- if (ts)
- ts->RemoveBlacklistedURL(GURL(url));
- }
-}
-
-void MostVisitedHandler::HandleClearBlacklist(const base::ListValue* args) {
- content::RecordAction(UserMetricsAction("MostVisited_BlacklistCleared"));
-
- scoped_refptr<history::TopSites> ts =
- TopSitesFactory::GetForProfile(Profile::FromWebUI(web_ui()));
- if (ts)
- ts->ClearBlacklistedURLs();
-}
-
-void MostVisitedHandler::HandleMostVisitedAction(const base::ListValue* args) {
- DCHECK(args);
-
- double action_id;
- if (!args->GetDouble(0, &action_id))
- NOTREACHED();
-
- UMA_HISTOGRAM_ENUMERATION("NewTabPage.MostVisitedAction",
- static_cast<int>(action_id),
- NUM_NTP_FOLLOW_ACTIONS);
- most_visited_viewed_ = true;
- user_action_logged_ = true;
-}
-
-void MostVisitedHandler::HandleMostVisitedSelected(
- const base::ListValue* args) {
- most_visited_viewed_ = true;
-}
-
-void MostVisitedHandler::SetPagesValueFromTopSites(
- const history::MostVisitedURLList& data) {
- pages_value_.reset(new base::ListValue);
-
- history::MostVisitedURLList top_sites(data);
- for (size_t i = 0; i < top_sites.size(); i++) {
- const history::MostVisitedURL& url = top_sites[i];
-
- // The items which are to be written into |page_value| are also described in
- // chrome/browser/resources/ntp4/new_tab.js in @typedef for PageData. Please
- // update it whenever you add or remove any keys here.
- base::DictionaryValue* page_value = new base::DictionaryValue();
- if (url.url.is_empty()) {
- page_value->SetBoolean("filler", true);
- pages_value_->Append(page_value);
- continue;
- }
-
- NewTabUI::SetUrlTitleAndDirection(page_value,
- url.title,
- url.url);
- pages_value_->Append(page_value);
- }
-}
-
-void MostVisitedHandler::OnMostVisitedUrlsAvailable(
- const history::MostVisitedURLList& data) {
- SetPagesValueFromTopSites(data);
- if (got_first_most_visited_request_) {
- SendPagesValue();
- }
-}
-
-void MostVisitedHandler::TopSitesLoaded(history::TopSites* top_sites) {
-}
-
-void MostVisitedHandler::TopSitesChanged(history::TopSites* top_sites) {
- // Most visited urls changed, query again.
- StartQueryForMostVisited();
-}
-
-void MostVisitedHandler::BlacklistUrl(const GURL& url) {
- scoped_refptr<history::TopSites> ts =
- TopSitesFactory::GetForProfile(Profile::FromWebUI(web_ui()));
- if (ts)
- ts->AddBlacklistedURL(url);
- content::RecordAction(UserMetricsAction("MostVisited_UrlBlacklisted"));
-}
-
-std::string MostVisitedHandler::GetDictionaryKeyForUrl(const std::string& url) {
- return base::MD5String(url);
-}
-
-// static
-void MostVisitedHandler::RegisterProfilePrefs(
- user_prefs::PrefRegistrySyncable* registry) {
- registry->RegisterDictionaryPref(prefs::kNtpMostVisitedURLsBlacklist);
-}
diff --git a/chrome/browser/ui/webui/ntp/most_visited_handler.h b/chrome/browser/ui/webui/ntp/most_visited_handler.h
deleted file mode 100644
index 7e04d42..0000000
--- a/chrome/browser/ui/webui/ntp/most_visited_handler.h
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright (c) 2012 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 CHROME_BROWSER_UI_WEBUI_NTP_MOST_VISITED_HANDLER_H_
-#define CHROME_BROWSER_UI_WEBUI_NTP_MOST_VISITED_HANDLER_H_
-
-#include <string>
-#include <vector>
-
-#include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
-#include "components/history/core/browser/history_types.h"
-#include "components/history/core/browser/top_sites_observer.h"
-#include "content/public/browser/web_ui_message_handler.h"
-
-class GURL;
-
-namespace base {
-class ListValue;
-class Value;
-}
-
-namespace user_prefs {
-class PrefRegistrySyncable;
-}
-
-// The handler for Javascript messages related to the "most visited" view.
-//
-// This class manages one preference:
-// - The URL blacklist: URLs we do not want to show in the thumbnails list. It
-// is a dictionary for quick access (it associates a dummy boolean to the URL
-// string).
-class MostVisitedHandler : public content::WebUIMessageHandler,
- public history::TopSitesObserver {
- public:
-
- MostVisitedHandler();
- ~MostVisitedHandler() override;
-
- // WebUIMessageHandler override and implementation.
- void RegisterMessages() override;
-
- // Callback for the "getMostVisited" message.
- void HandleGetMostVisited(const base::ListValue* args);
-
- // Callback for the "blacklistURLFromMostVisited" message.
- void HandleBlacklistUrl(const base::ListValue* args);
-
- // Callback for the "removeURLsFromMostVisitedBlacklist" message.
- void HandleRemoveUrlsFromBlacklist(const base::ListValue* args);
-
- // Callback for the "clearMostVisitedURLsBlacklist" message.
- void HandleClearBlacklist(const base::ListValue* args);
-
- // Callback for the "mostVisitedAction" message.
- void HandleMostVisitedAction(const base::ListValue* args);
-
- // Callback for the "mostVisitedSelected" message.
- void HandleMostVisitedSelected(const base::ListValue* args);
-
- const std::vector<GURL>& most_visited_urls() const {
- return most_visited_urls_;
- }
-
- static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
-
- private:
- struct MostVisitedPage;
-
- // Send a request to the HistoryService to get the most visited pages.
- void StartQueryForMostVisited();
-
- // Sets pages_value_ from a format produced by TopSites.
- void SetPagesValueFromTopSites(const history::MostVisitedURLList& data);
-
- // Callback for TopSites.
- void OnMostVisitedUrlsAvailable(const history::MostVisitedURLList& data);
-
- // Puts the passed URL in the blacklist (so it does not show as a thumbnail).
- void BlacklistUrl(const GURL& url);
-
- // Returns the key used in url_blacklist_ for the passed |url|.
- std::string GetDictionaryKeyForUrl(const std::string& url);
-
- // Sends pages_value_ to the javascript side and resets page_value_.
- void SendPagesValue();
-
- // history::TopSitesObserver implementation.
- void TopSitesLoaded(history::TopSites* top_sites) override;
- void TopSitesChanged(history::TopSites* top_sites) override;
-
- // Scoped observer to help with TopSitesObserver registration.
- ScopedObserver<history::TopSites, history::TopSitesObserver> scoped_observer_;
-
- // The most visited URLs, in priority order.
- // Only used for matching up clicks on the page to which most visited entry
- // was clicked on for metrics purposes.
- std::vector<GURL> most_visited_urls_;
-
- // We pre-fetch the first set of result pages. This variable is false until
- // we get the first getMostVisited() call.
- bool got_first_most_visited_request_;
-
- // Keep the results of the db query here.
- scoped_ptr<base::ListValue> pages_value_;
-
- // Whether the user has viewed the 'most visited' pane.
- bool most_visited_viewed_;
-
- // Whether the user has performed a "tracked" action to leave the page or not.
- bool user_action_logged_;
-
- // For callbacks which may be run after destruction.
- base::WeakPtrFactory<MostVisitedHandler> weak_ptr_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(MostVisitedHandler);
-};
-
-#endif // CHROME_BROWSER_UI_WEBUI_NTP_MOST_VISITED_HANDLER_H_
diff --git a/chrome/browser/ui/webui/ntp/new_tab_page_handler.cc b/chrome/browser/ui/webui/ntp/new_tab_page_handler.cc
index d908496..a07e340 100644
--- a/chrome/browser/ui/webui/ntp/new_tab_page_handler.cc
+++ b/chrome/browser/ui/webui/ntp/new_tab_page_handler.cc
@@ -68,9 +68,6 @@ void NewTabPageHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback("pageSelected",
base::Bind(&NewTabPageHandler::HandlePageSelected,
base::Unretained(this)));
- web_ui()->RegisterMessageCallback("logTimeToClick",
- base::Bind(&NewTabPageHandler::HandleLogTimeToClick,
- base::Unretained(this)));
}
void NewTabPageHandler::HandleNotificationPromoClosed(
@@ -143,26 +140,6 @@ void NewTabPageHandler::HandlePageSelected(const base::ListValue* args) {
shown_page_type, kHistogramEnumerationMax);
}
-void NewTabPageHandler::HandleLogTimeToClick(const base::ListValue* args) {
- std::string histogram_name;
- double duration;
- if (!args->GetString(0, &histogram_name) || !args->GetDouble(1, &duration)) {
- NOTREACHED();
- return;
- }
-
- base::TimeDelta delta = base::TimeDelta::FromMilliseconds(duration);
-
- if (histogram_name == "NewTabPage.TimeToClickMostVisited") {
- UMA_HISTOGRAM_LONG_TIMES("NewTabPage.TimeToClickMostVisited", delta);
- } else if (histogram_name == "ExtendedNewTabPage.TimeToClickMostVisited") {
- UMA_HISTOGRAM_LONG_TIMES(
- "ExtendedNewTabPage.TimeToClickMostVisited", delta);
- } else {
- NOTREACHED();
- }
-}
-
// static
void NewTabPageHandler::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* registry) {
@@ -173,7 +150,6 @@ void NewTabPageHandler::RegisterProfilePrefs(
// static
void NewTabPageHandler::GetLocalizedValues(Profile* profile,
base::DictionaryValue* values) {
- values->SetInteger("most_visited_page_id", MOST_VISITED_PAGE_ID);
values->SetInteger("apps_page_id", APPS_PAGE_ID);
PrefService* prefs = profile->GetPrefs();
diff --git a/chrome/browser/ui/webui/ntp/new_tab_page_handler.h b/chrome/browser/ui/webui/ntp/new_tab_page_handler.h
index d822354..ec2b291 100644
--- a/chrome/browser/ui/webui/ntp/new_tab_page_handler.h
+++ b/chrome/browser/ui/webui/ntp/new_tab_page_handler.h
@@ -58,9 +58,6 @@ class NewTabPageHandler : public content::WebUIMessageHandler,
// Callback for "pageSelected".
void HandlePageSelected(const base::ListValue* args);
- // Callback for "logTimeToClick".
- void HandleLogTimeToClick(const base::ListValue* args);
-
// Tracks the number of times the user has switches pages (for UMA).
size_t page_switch_count_;
@@ -71,7 +68,6 @@ class NewTabPageHandler : public content::WebUIMessageHandler,
static const int kPageIdOffset = 10;
enum {
INDEX_MASK = (1 << kPageIdOffset) - 1,
- MOST_VISITED_PAGE_ID = 1 << kPageIdOffset,
APPS_PAGE_ID = 2 << kPageIdOffset,
LAST_PAGE_ID = APPS_PAGE_ID,
};
diff --git a/chrome/browser/ui/webui/ntp/new_tab_ui.cc b/chrome/browser/ui/webui/ntp/new_tab_ui.cc
index 8671b41..4685578 100644
--- a/chrome/browser/ui/webui/ntp/new_tab_ui.cc
+++ b/chrome/browser/ui/webui/ntp/new_tab_ui.cc
@@ -18,7 +18,6 @@
#include "chrome/browser/ui/webui/ntp/app_launcher_handler.h"
#include "chrome/browser/ui/webui/ntp/core_app_launcher_handler.h"
#include "chrome/browser/ui/webui/ntp/favicon_webui_handler.h"
-#include "chrome/browser/ui/webui/ntp/most_visited_handler.h"
#include "chrome/browser/ui/webui/ntp/new_tab_page_handler.h"
#include "chrome/browser/ui/webui/ntp/new_tab_page_sync_handler.h"
#include "chrome/browser/ui/webui/ntp/ntp_login_handler.h"
@@ -93,7 +92,6 @@ NewTabUI::NewTabUI(content::WebUI* web_ui)
Profile* profile = GetProfile();
if (!profile->IsOffTheRecord()) {
web_ui->AddMessageHandler(new MetricsHandler());
- web_ui->AddMessageHandler(new MostVisitedHandler());
web_ui->AddMessageHandler(new FaviconWebUIHandler());
web_ui->AddMessageHandler(new NewTabPageHandler());
web_ui->AddMessageHandler(new CoreAppLauncherHandler());
@@ -213,7 +211,6 @@ void NewTabUI::RegisterProfilePrefs(
user_prefs::PrefRegistrySyncable* registry) {
CoreAppLauncherHandler::RegisterProfilePrefs(registry);
NewTabPageHandler::RegisterProfilePrefs(registry);
- MostVisitedHandler::RegisterProfilePrefs(registry);
}
// static
diff --git a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
index 1a27e73..7b06422 100644
--- a/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
+++ b/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc
@@ -165,7 +165,6 @@ std::string GetNewTabBackgroundTilingCSS(
NTPResourceCache::NTPResourceCache(Profile* profile)
: profile_(profile), is_swipe_tracking_from_scroll_events_enabled_(false),
should_show_apps_page_(NewTabUI::ShouldShowApps()),
- should_show_most_visited_page_(true),
should_show_other_devices_menu_(true) {
registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
content::Source<ThemeService>(
@@ -414,27 +413,16 @@ void NTPResourceCache::CreateNewTabHTML() {
load_time_data.SetBoolean("hasattribution",
ThemeServiceFactory::GetForProfile(profile_)->HasCustomImage(
IDR_THEME_NTP_ATTRIBUTION));
- load_time_data.SetBoolean("showMostvisited", should_show_most_visited_page_);
load_time_data.SetBoolean("showAppLauncherPromo",
ShouldShowAppLauncherPromo());
load_time_data.SetString("title",
l10n_util::GetStringUTF16(IDS_NEW_TAB_TITLE));
- load_time_data.SetString("mostvisited",
- l10n_util::GetStringUTF16(IDS_NEW_TAB_MOST_VISITED));
- load_time_data.SetString("restoreThumbnailsShort",
- l10n_util::GetStringUTF16(IDS_NEW_TAB_RESTORE_THUMBNAILS_SHORT_LINK));
load_time_data.SetString("webStoreTitle",
l10n_util::GetStringUTF16(IDS_EXTENSION_WEB_STORE_TITLE));
load_time_data.SetString("webStoreTitleShort",
l10n_util::GetStringUTF16(IDS_EXTENSION_WEB_STORE_TITLE_SHORT));
load_time_data.SetString("attributionintro",
l10n_util::GetStringUTF16(IDS_NEW_TAB_ATTRIBUTION_INTRO));
- load_time_data.SetString("thumbnailremovednotification",
- l10n_util::GetStringUTF16(IDS_NEW_TAB_THUMBNAIL_REMOVED_NOTIFICATION));
- load_time_data.SetString("undothumbnailremove",
- l10n_util::GetStringUTF16(IDS_NEW_TAB_UNDO_THUMBNAIL_REMOVE));
- load_time_data.SetString("removethumbnailtooltip",
- l10n_util::GetStringUTF16(IDS_NEW_TAB_REMOVE_THUMBNAIL_TOOLTIP));
load_time_data.SetString("appuninstall",
l10n_util::GetStringUTF16(IDS_EXTENSIONS_UNINSTALL));
load_time_data.SetString("appoptions",
diff --git a/chrome/browser/ui/webui/ntp/ntp_resource_cache.h b/chrome/browser/ui/webui/ntp/ntp_resource_cache.h
index 056955b..211a5e1 100644
--- a/chrome/browser/ui/webui/ntp/ntp_resource_cache.h
+++ b/chrome/browser/ui/webui/ntp/ntp_resource_cache.h
@@ -45,9 +45,6 @@ class NTPResourceCache : public content::NotificationObserver,
void set_should_show_apps_page(bool should_show_apps_page) {
should_show_apps_page_ = should_show_apps_page;
}
- void set_should_show_most_visited_page(bool should_show_most_visited_page) {
- should_show_most_visited_page_ = should_show_most_visited_page;
- }
void set_should_show_other_devices_menu(bool should_show_other_devices_menu) {
should_show_other_devices_menu_ = should_show_other_devices_menu;
}
@@ -103,9 +100,6 @@ class NTPResourceCache : public content::NotificationObserver,
bool is_swipe_tracking_from_scroll_events_enabled_;
// Set based on NewTabUI::ShouldShowApps.
bool should_show_apps_page_;
- // The next three all default to true and can be manually set, e.g., by the
- // chrome://apps page.
- bool should_show_most_visited_page_;
bool should_show_other_devices_menu_;
DISALLOW_COPY_AND_ASSIGN(NTPResourceCache);
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index f759cb1..dfefe5d 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -685,6 +685,8 @@
'browser/search/suggestions/suggestions_service_factory.h',
'browser/search/suggestions/suggestions_source.cc',
'browser/search/suggestions/suggestions_source.h',
+ 'browser/search/thumbnail_source.cc',
+ 'browser/search/thumbnail_source.h',
'browser/searuch/most_visited_iframe_source.h',
'browser/shell_integration.cc',
'browser/shell_integration.h',
diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi
index 8fc1ca4..609dc13 100644
--- a/chrome/chrome_browser_ui.gypi
+++ b/chrome/chrome_browser_ui.gypi
@@ -1781,8 +1781,6 @@
'browser/ui/webui/ntp/core_app_launcher_handler.h',
'browser/ui/webui/ntp/favicon_webui_handler.cc',
'browser/ui/webui/ntp/favicon_webui_handler.h',
- 'browser/ui/webui/ntp/most_visited_handler.cc',
- 'browser/ui/webui/ntp/most_visited_handler.h',
'browser/ui/webui/ntp/new_tab_page_handler.cc',
'browser/ui/webui/ntp/new_tab_page_handler.h',
'browser/ui/webui/ntp/new_tab_page_sync_handler.cc',
@@ -1796,8 +1794,6 @@
'browser/ui/webui/ntp/ntp_resource_cache_factory.cc',
'browser/ui/webui/ntp/ntp_resource_cache_factory.h',
'browser/ui/webui/ntp/ntp_stats.h',
- 'browser/ui/webui/ntp/thumbnail_source.cc',
- 'browser/ui/webui/ntp/thumbnail_source.h',
'browser/ui/webui/options/advanced_options_utils.h',
'browser/ui/webui/options/advanced_options_utils_linux.cc',
'browser/ui/webui/options/advanced_options_utils_mac.mm',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 73e039d..c2cd811 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -527,7 +527,6 @@
'browser/ui/webui/interstitials/interstitial_ui_browsertest.cc',
'browser/ui/webui/net_internals/net_internals_ui_browsertest.cc',
'browser/ui/webui/net_internals/net_internals_ui_browsertest.h',
- 'browser/ui/webui/ntp/most_visited_browsertest.cc',
'browser/ui/webui/ntp/new_tab_page_sync_handler_browsertest.cc',
'browser/ui/webui/ntp/new_tab_ui_browsertest.cc',
'browser/ui/webui/options/clear_browser_data_browsertest.cc',
diff --git a/chrome/test/base/web_ui_browser_test.h b/chrome/test/base/web_ui_browser_test.h
index ab9223e..0bc0d5f 100644
--- a/chrome/test/base/web_ui_browser_test.h
+++ b/chrome/test/base/web_ui_browser_test.h
@@ -25,12 +25,6 @@ class WebUIMessageHandler;
class TestChromeWebUIControllerFactory;
class WebUITestHandler;
-// This macro simplifies the declaration of simple javascript unit tests.
-// Use:
-// WEB_UI_UNITTEST_F(MyWebUIPageTest, myJavascriptUnittest);
-#define WEB_UI_UNITTEST_F(x, y) \
- IN_PROC_BROWSER_TEST_F(x, y) { ASSERT_TRUE(RunJavascriptTest(#y)); }
-
// The runner of WebUI javascript based tests.
// See chrome/test/data/webui/test_api.js for the javascript side test API's.
//