xref: /aosp_15_r20/external/autotest/client/cros/multimedia/browser_facade.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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