Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(408)

Unified Diff: chrome/test/pyautolib/ntp_model.py

Issue 3477001: Add pyauto hook for getting and manipulating the data underneath the NTP.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/functional/ntp.py ('k') | chrome/test/pyautolib/pyauto.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/pyautolib/ntp_model.py
===================================================================
--- chrome/test/pyautolib/ntp_model.py (revision 0)
+++ chrome/test/pyautolib/ntp_model.py (revision 0)
@@ -0,0 +1,213 @@
+#!/usr/bin/python
+
+# Copyright (c) 2010 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.
+
+"""NTPModel: python representation of the NTP.
+
+This does not refer to any one particular instance of the NTP, but the
+model behind all such pages.
+
+Obtain one of these from PyUITestSuite::GetNTPModel() call.
+
+Most actions with the NTPModel will raise a NTPThumbnailNotShownError
+if an attempt is made to manipulate a Most Visited site thumbnail that
+is not visible to the actual user.
+"""
+
+import exceptions
+
+
+class NTPThumbnailNotShownError(RuntimeError):
+ """Represent an error from attempting to manipulate a NTP thumbnail that
+ is not visible to a real user."""
+ pass
+
+class NTPModel(object):
+
+ def __init__(self, sender):
+ """Initialize the NTPModel with the channel for sending requests.
+
+ Args:
+ sender: a pyautolib.PyUITestBase which can send JSON requests
+ """
+ self._sender = sender
+
+ def GetThumbnails(self):
+ """Return a list of info about the sites in the most visited section.
+ SAMPLE:
+ [{ u'title': u'Google',
+ u'url': u'http://www.google.com',
+ u'is_pinned': False},
+ {
+ u'title': u'Yahoo',
+ u'url': u'http://www.yahoo.com',
+ u'is_pinned': True}]
+ """
+ return self._GetInfo()['most_visited']
+
+ def GetThumbnailIndex(self, thumbnail):
+ """Returns the index of the given thumbnail, or -1 if it is not shown.
+
+ Args:
+ thumbnail: a thumbnail dict received from |GetThumbnails|
+ """
+ thumbnails = self.GetThumbnails()
+ for i in range(len(thumbnails)):
+ if thumbnails[i]['url'] == thumbnail['url']:
+ return i
+ return -1
+
+ def MoveThumbnail(self, thumbnail, new_index):
+ """Moves the given thumbnail to a new index. The indices in the NTP Most
+ Visited sites section look like:
+ 0 1 2 3
+ 4 5 6 7
+
+ Args:
+ thumbnail: a thumbnail dict received from |GetThumbnails|
+ new_index: the index to be moved to in the Most Visited sites section
+
+ Raises:
+ exceptions.IndexError if there is no thumbnail at the index
+
+ Note:
+ When a thumbnail is moved, it is automatically pinned
+ """
+ if new_index < 0 or new_index >= len(self.GetThumbnails()):
+ raise exceptions.IndexError()
+ self._CheckThumbnailShown(thumbnail)
+ cmd_dict = {
+ 'command': 'MoveNTPMostVisitedThumbnail',
+ 'url': thumbnail['url'],
+ 'index': new_index,
+ 'old_index': self.GetThumbnailIndex(thumbnail)
+ }
+ self._sender._GetResultFromJSONRequest(cmd_dict)
+
+ def RemoveThumbnail(self, thumbnail):
+ """Removes the thumbnail and returns true on success.
+
+ Args:
+ thumbnail: a thumbnail dict received from |GetThumbnails|
+ """
+ self._CheckThumbnailShown(thumbnail)
+ cmd_dict = {
+ 'command': 'RemoveNTPMostVisitedThumbnail',
+ 'url': thumbnail['url']
+ }
+ self._sender._GetResultFromJSONRequest(cmd_dict)
+
+ def PinThumbnail(self, thumbnail):
+ """Pins the thumbnail.
+
+ Args:
+ thumbnail: a thumbnail dict received from |GetThumbnails|
+ """
+ self._CheckThumbnailShown(thumbnail)
+ self.MoveThumbnail(thumbnail, self.GetThumbnailIndex(thumbnail))
+
+ def UnpinThumbnail(self, thumbnail):
+ """Unpins the thumbnail and returns true on success.
+
+ Args:
+ thumbnail: a thumbnail dict received from |GetThumbnails|
+ """
+ self._CheckThumbnailShown(thumbnail)
+ cmd_dict = {
+ 'command': 'UnpinNTPMostVisitedThumbnail',
+ 'url': thumbnail['url']
+ }
+ self._sender._GetResultFromJSONRequest(cmd_dict)
+
+ def IsPinned(self, thumbnail):
+ """Returns whether the thumbnail is pinned.
+
+ Args:
+ thumbnail: a thumbnail dict received from |GetThumbnails|
+ """
+ self._CheckThumbnailShown(thumbnail)
+ return self.GetThumbnails()[self.GetThumbnailIndex(thumbnail)]['is_pinned']
+
+ def RestoreAllThumbnails(self):
+ """Restores all the removed thumbnails.
+ Note:
+ the default thumbnails may come back into the Most Visited sites
+ section after doing this
+ """
+ cmd_dict = {
+ 'command': 'RestoreAllNTPMostVisitedThumbnails'
+ }
+ self._sender._GetResultFromJSONRequest(cmd_dict)
+
+ def CloseDefaultThumbnails(self):
+ """Closes all the default thumbnails. These do not actually need to be
+ showing to close.
+ Note:
+ using this method will make your test depend on the default thumbnail
+ urls, which could easily change. Do not use this method unless
+ necessary.
+ """
+ cmd_dict = { 'command': 'RemoveNTPMostVisitedThumbnail' }
+ cmd_dict['url'] = 'http://www.google.com/chrome/intl/en/welcome.html'
+ self._sender._GetResultFromJSONRequest(cmd_dict)
+ cmd_dict['url'] = ('https://tools.google.com/chrome/intl/en/themes'
+ '/index.html')
+ self._sender._GetResultFromJSONRequest(cmd_dict)
+
+ def GetRecentlyClosed(self):
+ """Return a list of info about the items in the recently closed section.
+ SAMPLE:
+ [{
+ u'type': u'tab',
+ u'url': u'http://www.bing.com',
+ u'title': u'Bing',
+ u'timestamp': 2139082.03912, # Seconds since epoch (Jan 1, 1970)
+ u'direction': u'ltr'},
+ {
+ u'type': u'window',
+ u'timestamp': 2130821.90812,
+ u'tabs': [
+ {
+ u'type': u'tab',
+ u'url': u'http://www.cnn.com',
+ u'title': u'CNN',
+ u'timestamp': 2129082.12098,
+ u'direction': u'ltr'}]},
+ {
+ u'type': u'tab',
+ u'url': u'http://www.altavista.com',
+ u'title': u'Altavista',
+ u'timestamp': 21390820.12903,
+ u'direction': u'rtl'}]
+ """
+ return self._GetInfo()['recently_closed']
+
+ def _GetInfo(self):
+ """Get info about the NTP. This does not retrieve the actual info shown
+ in a particular NTP, but the current data that would be used to display
+ a NTP.
+
+ This includes info about the most visited sites and the recently closed
+ tabs and windows.
+
+ Returns:
+ a dictionary containing info about NTP info. See details about the
+ sections in their respective methods.
+ SAMPLE:
+ { u'most_visited': [ ... ],
+ u'recently_closed': [ ... ]
+ }
+
+ Raises:
+ pyauto_errors.JSONInterfaceError if the automation call returns an error.
+ """
+ cmd_dict = {
+ 'command': 'GetNTPInfo',
+ }
+ return self._sender._GetResultFromJSONRequest(cmd_dict)
+
+ def _CheckThumbnailShown(self, thumbnail):
+ if self.GetThumbnailIndex(thumbnail) == -1:
+ raise NTPThumbnailNotShownError()
Property changes on: chrome\test\pyautolib\ntp_model.py
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/test/functional/ntp.py ('k') | chrome/test/pyautolib/pyauto.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698