| 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
 | 
| 
 | 
| 
 |