# META: timeout=long from tests.support.asserts import assert_error, assert_success, assert_dialog_handled from tests.support.fixtures import create_dialog from tests.support.inline import inline alert_doc = inline("") def read_global(session, name): return session.execute_script("return %s;" % name) def fullscreen(session): return session.transport.send("POST", "session/%s/window/fullscreen" % session.session_id) # 10.7.5 Fullscreen Window def test_no_browsing_context(session, create_window): """ 1. If the current top-level browsing context is no longer open, return error with error code no such window. """ session.window_handle = create_window() session.close() response = fullscreen(session) assert_error(response, "no such window") def test_handle_prompt_dismiss_and_notify(): """TODO""" def test_handle_prompt_accept_and_notify(): """TODO""" def test_handle_prompt_ignore(): """TODO""" def test_handle_prompt_accept(new_session, add_browser_capabilites): """ 2. Handle any user prompts and return its value if it is an error. [...] In order to handle any user prompts a remote end must take the following steps: [...] 2. Perform the following substeps based on the current session's user prompt handler: [...] - accept state Accept the current user prompt. """ _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}}) session.url = inline("WD doc title") create_dialog(session)("alert", text="accept #1", result_var="accept1") response = fullscreen(session) assert_dialog_handled(session, "accept #1") assert read_global(session, "accept1") == None expected_title = read_global(session, "document.title") create_dialog(session)("confirm", text="accept #2", result_var="accept2") response = fullscreen(session) assert_dialog_handled(session, "accept #2") assert read_global(session, "accept2"), True create_dialog(session)("prompt", text="accept #3", result_var="accept3") response = fullscreen(session) assert_dialog_handled(session, "accept #3") assert read_global(session, "accept3") == "" or read_global(session, "accept3") == "undefined" def test_handle_prompt_missing_value(session, create_dialog): """ 2. Handle any user prompts and return its value if it is an error. [...] In order to handle any user prompts a remote end must take the following steps: [...] 2. Perform the following substeps based on the current session's user prompt handler: [...] - missing value default state 1. Dismiss the current user prompt. 2. Return error with error code unexpected alert open. """ session.url = inline("WD doc title") create_dialog("alert", text="dismiss #1", result_var="dismiss1") response = fullscreen(session) assert_error(response, "unexpected alert open") assert_dialog_handled(session, "dismiss #1") assert read_global(session, "dismiss1") == None create_dialog("confirm", text="dismiss #2", result_var="dismiss2") response = fullscreen(session) assert_error(response, "unexpected alert open") assert_dialog_handled(session, "dismiss #2") assert read_global(session, "dismiss2") == False create_dialog("prompt", text="dismiss #3", result_var="dismiss3") response = fullscreen(session) assert_error(response, "unexpected alert open") assert_dialog_handled(session, "dismiss #3") assert read_global(session, "dismiss3") == None def is_fullscreen(session): # At the time of writing, WebKit does not conform to the Fullscreen API specification. # Remove the prefixed fallback when https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed. return session.execute_script("return !!(window.fullScreen || document.webkitIsFullScreen)") def test_fullscreen(session): """ 4. Call fullscreen an element with the current top-level browsing context's active document's document element. """ response = fullscreen(session) assert_success(response) assert is_fullscreen(session) is True def test_payload(session): """ 5. Return success with the JSON serialization of the current top-level browsing context's window rect. [...] A top-level browsing context's window rect is defined as a dictionary of the screenX, screenY, width and height attributes of the WindowProxy. Its JSON representation is the following: "x" WindowProxy's screenX attribute. "y" WindowProxy's screenY attribute. "width" Width of the top-level browsing context's outer dimensions, including any browser chrome and externally drawn window decorations in CSS reference pixels. "height" Height of the top-level browsing context's outer dimensions, including any browser chrome and externally drawn window decorations in CSS reference pixels. """ response = fullscreen(session) # step 5 assert response.status == 200 assert isinstance(response.body["value"], dict) value = response.body["value"] assert "width" in value assert "height" in value assert "x" in value assert "y" in value assert isinstance(value["width"], int) assert isinstance(value["height"], int) assert isinstance(value["x"], int) assert isinstance(value["y"], int) def test_fullscreen_twice_is_idempotent(session): assert is_fullscreen(session) is False first_response = fullscreen(session) assert_success(first_response) assert is_fullscreen(session) is True second_response = fullscreen(session) assert_success(second_response) assert is_fullscreen(session) is True