1*9c5db199SXin Li# Copyright 2015 The Chromium OS Authors. All rights reserved. 2*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be 3*9c5db199SXin Li# found in the LICENSE file. 4*9c5db199SXin Li 5*9c5db199SXin Li"""An interface to access the local browser facade.""" 6*9c5db199SXin Li 7*9c5db199SXin Liimport logging 8*9c5db199SXin Li 9*9c5db199SXin Liclass BrowserFacadeLocalError(Exception): 10*9c5db199SXin Li """Error in BrowserFacadeLocal.""" 11*9c5db199SXin Li pass 12*9c5db199SXin Li 13*9c5db199SXin Li 14*9c5db199SXin Liclass BrowserFacadeLocal(object): 15*9c5db199SXin Li """Facade to access the browser-related functionality.""" 16*9c5db199SXin Li 17*9c5db199SXin Li def __init__(self, resource): 18*9c5db199SXin Li """Initializes the USB facade. 19*9c5db199SXin Li 20*9c5db199SXin Li @param resource: A FacadeResource object. 21*9c5db199SXin Li 22*9c5db199SXin Li """ 23*9c5db199SXin Li self._resource = resource 24*9c5db199SXin Li 25*9c5db199SXin Li 26*9c5db199SXin Li def start_custom_chrome(self, kwargs): 27*9c5db199SXin Li """Start a custom Chrome with given arguments. 28*9c5db199SXin Li 29*9c5db199SXin Li @param kwargs: A dict of keyword arguments passed to Chrome. 30*9c5db199SXin Li @return: True on success, False otherwise. 31*9c5db199SXin Li 32*9c5db199SXin Li """ 33*9c5db199SXin Li return self._resource.start_custom_chrome(kwargs) 34*9c5db199SXin Li 35*9c5db199SXin Li 36*9c5db199SXin Li def start_default_chrome(self, restart=False, extra_browser_args=None, 37*9c5db199SXin Li disable_arc=False): 38*9c5db199SXin Li """Start the default Chrome. 39*9c5db199SXin Li 40*9c5db199SXin Li @param restart: True to start Chrome without clearing previous state. 41*9c5db199SXin Li @param extra_browser_args: A list containing extra browser args passed 42*9c5db199SXin Li to Chrome in addition to default ones. 43*9c5db199SXin Li @param disable_arc: True to disable ARC++. 44*9c5db199SXin Li @return: True on success, False otherwise. 45*9c5db199SXin Li 46*9c5db199SXin Li """ 47*9c5db199SXin Li return self._resource.start_default_chrome(restart, extra_browser_args, 48*9c5db199SXin Li disable_arc) 49*9c5db199SXin Li 50*9c5db199SXin Li 51*9c5db199SXin Li def set_http_server_directories(self, directories): 52*9c5db199SXin Li """Starts an HTTP server. 53*9c5db199SXin Li 54*9c5db199SXin Li @param directories: Directories to start serving. 55*9c5db199SXin Li 56*9c5db199SXin Li @return True on success. False otherwise. 57*9c5db199SXin Li 58*9c5db199SXin Li """ 59*9c5db199SXin Li return self._resource.set_http_server_directories(directories) 60*9c5db199SXin Li 61*9c5db199SXin Li 62*9c5db199SXin Li def http_server_url_of(self, fullpath): 63*9c5db199SXin Li """Converts a path to a URL. 64*9c5db199SXin Li 65*9c5db199SXin Li @param fullpath: String containing the full path to the content. 66*9c5db199SXin Li 67*9c5db199SXin Li @return the URL for the provided path. 68*9c5db199SXin Li 69*9c5db199SXin Li """ 70*9c5db199SXin Li return self._resource.http_server_url_of(fullpath) 71*9c5db199SXin Li 72*9c5db199SXin Li 73*9c5db199SXin Li def new_tab(self, url): 74*9c5db199SXin Li """Opens a new tab and loads URL. 75*9c5db199SXin Li 76*9c5db199SXin Li @param url: The URL to load. 77*9c5db199SXin Li @return a str, the tab descriptor of the opened tab. 78*9c5db199SXin Li 79*9c5db199SXin Li """ 80*9c5db199SXin Li logging.debug('Load URL %s', url) 81*9c5db199SXin Li return self._resource.load_url(url) 82*9c5db199SXin Li 83*9c5db199SXin Li 84*9c5db199SXin Li def close_tab(self, tab_descriptor): 85*9c5db199SXin Li """Closes a previously opened tab. 86*9c5db199SXin Li 87*9c5db199SXin Li @param tab_descriptor: Indicate which tab to be closed. 88*9c5db199SXin Li 89*9c5db199SXin Li """ 90*9c5db199SXin Li tab = self._resource.get_tab_by_descriptor(tab_descriptor) 91*9c5db199SXin Li logging.debug('Closing URL %s', tab.url) 92*9c5db199SXin Li self._resource.close_tab(tab_descriptor) 93*9c5db199SXin Li 94*9c5db199SXin Li 95*9c5db199SXin Li def wait_for_javascript_expression( 96*9c5db199SXin Li self, tab_descriptor, expression, timeout): 97*9c5db199SXin Li """Waits for the given JavaScript expression to be True on the 98*9c5db199SXin Li given tab. 99*9c5db199SXin Li 100*9c5db199SXin Li @param tab_descriptor: Indicate on which tab to wait for the expression. 101*9c5db199SXin Li @param expression: Indiate for what expression to wait. 102*9c5db199SXin Li @param timeout: Indicate the timeout of the expression. 103*9c5db199SXin Li """ 104*9c5db199SXin Li self._resource.wait_for_javascript_expression( 105*9c5db199SXin Li tab_descriptor, expression, timeout) 106*9c5db199SXin Li 107*9c5db199SXin Li 108*9c5db199SXin Li def execute_javascript(self, tab_descriptor, statement, timeout): 109*9c5db199SXin Li """Executes a JavaScript statement on the given tab. 110*9c5db199SXin Li 111*9c5db199SXin Li @param tab_descriptor: Indicate on which tab to execute the statement. 112*9c5db199SXin Li @param statement: Indiate what statement to execute. 113*9c5db199SXin Li @param timeout: Indicate the timeout of the statement. 114*9c5db199SXin Li """ 115*9c5db199SXin Li self._resource.execute_javascript( 116*9c5db199SXin Li tab_descriptor, statement, timeout) 117*9c5db199SXin Li 118*9c5db199SXin Li 119*9c5db199SXin Li def evaluate_javascript(self, tab_descriptor, expression, timeout): 120*9c5db199SXin Li """Evaluates a JavaScript expression on the given tab. 121*9c5db199SXin Li 122*9c5db199SXin Li @param tab_descriptor: Indicate on which tab to evaluate the expression. 123*9c5db199SXin Li @param expression: Indiate what expression to evaluate. 124*9c5db199SXin Li @param timeout: Indicate the timeout of the expression. 125*9c5db199SXin Li @return the JSONized result of the given expression 126*9c5db199SXin Li """ 127*9c5db199SXin Li return self._resource.evaluate_javascript( 128*9c5db199SXin Li tab_descriptor, expression, timeout) 129*9c5db199SXin Li 130*9c5db199SXin Li 131*9c5db199SXin Li def get_tab_urls(self): 132*9c5db199SXin Li """Gets urls from current Chrome tabs. 133*9c5db199SXin Li 134*9c5db199SXin Li @returns: A list of str objects which contain urls from current Chrome 135*9c5db199SXin Li tabs. 136*9c5db199SXin Li """ 137*9c5db199SXin Li logging.info("Getting tab objects from Chrome...") 138*9c5db199SXin Li tabs = self._resource.get_tabs() 139*9c5db199SXin Li 140*9c5db199SXin Li return [tab.url for tab in tabs] 141