U
    gC                     @  s  d dl mZ ddlmZmZ d dlmZ d dlZd dlZddl	m
Z
 G dd deZG d	d
 d
eZG dd dejZeG dd dZG dd dejZG dd dejZeG dd dZeG dd dZeG dd dZdOddddddddZdPddddd d!d"ZdQddd#d$d%ZdRd&dddd'd(d)Zdd*d+d,Zdd*d-d.Zdd*d/d0Zd1d*d2d3Zd4d*d5d6ZdSdd7d8d9d:d;Z dTd&d7d<d=d>d?Z!d
d@dAdBdCZ"dUdDdEdFdGdHZ#d
dddIdJdKZ$dVddddLdMdNZ%dS )W    )annotations   )event_classT_JSON_DICT)	dataclassN)targetc                      s>   e Zd ZddddZedd dddZ fdd	Z  ZS )
BrowserContextIDstrreturnc                 C  s   | S N selfr   r   R/tmp/pip-unpacked-wheel-3ysq0mf8/selenium/webdriver/common/devtools/v85/browser.pyto_json   s    zBrowserContextID.to_jsonjsonr   c                 C  s   | |S r   r   clsr   r   r   r   	from_json   s    zBrowserContextID.from_jsonc                   s   d t  S )NzBrowserContextID({})formatsuper__repr__r   	__class__r   r   r      s    zBrowserContextID.__repr____name__
__module____qualname__r   classmethodr   r   __classcell__r   r   r   r   r      s   r   c                      s>   e Zd ZddddZedd dddZ fdd	Z  ZS )
WindowIDintr
   c                 C  s   | S r   r   r   r   r   r   r      s    zWindowID.to_jsonr   c                 C  s   | |S r   r   r   r   r   r   r      s    zWindowID.from_jsonc                   s   d t  S )NzWindowID({})r   r   r   r   r   r   #   s    zWindowID.__repr__r   r   r   r   r   r#      s   r#   c                   @  s4   e Zd ZdZdZdZdZdZdd Ze	dd	 Z
d
S )WindowStatez*
    The state of the browser window.
    normalZ	minimizedZ	maximizedZ
fullscreenc                 C  s   | j S r   valuer   r   r   r   r   0   s    zWindowState.to_jsonc                 C  s   | |S r   r   r   r   r   r   r   3   s    zWindowState.from_jsonN)r   r   r    __doc__NORMALZ	MINIMIZEDZ	MAXIMIZEDZ
FULLSCREENr   r!   r   r   r   r   r   r%   '   s   r%   c                   @  sb   e Zd ZU dZdZded< dZded< dZded< dZded< dZ	ded	< d
d Z
edd ZdS )Boundsz+
    Browser window bounds information
    Nztyping.Optional[int]lefttopwidthheightztyping.Optional[WindowState]window_statec                 C  sr   t  }| jd k	r| j|d< | jd k	r.| j|d< | jd k	rB| j|d< | jd k	rV| j|d< | jd k	rn| j |d< |S )Nr,   r-   r.   r/   windowState)dictr,   r-   r.   r/   r0   r   r   r   r   r   r   r   L   s    








zBounds.to_jsonc              	   C  sx   | d|krt |d nd d|kr,t |d nd d|krBt |d nd d|krXt |d nd d|krpt|d nd dS )Nr,   r-   r.   r/   r1   )r,   r-   r.   r/   r0   )r$   r%   r   r   r   r   r   r   Z   s    zBounds.from_json)r   r   r    r)   r,   __annotations__r-   r.   r/   r0   r   r!   r   r   r   r   r   r+   8   s   
r+   c                   @  st   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdd Zedd ZdS )PermissionTypeZaccessibilityEventsZaudioCaptureZbackgroundSyncZbackgroundFetchZclipboardReadWriteZclipboardSanitizedWriteZdurableStorageZflashZgeolocationZmidiZ	midiSysexZnfcZnotificationsZpaymentHandlerZperiodicBackgroundSyncZprotectedMediaIdentifierZsensorsZvideoCaptureZidleDetectionZwakeLockScreenZwakeLockSystemc                 C  s   | j S r   r'   r   r   r   r   r   |   s    zPermissionType.to_jsonc                 C  s   | |S r   r   r   r   r   r   r      s    zPermissionType.from_jsonN)r   r   r    ZACCESSIBILITY_EVENTSZAUDIO_CAPTUREZBACKGROUND_SYNCZBACKGROUND_FETCHZCLIPBOARD_READ_WRITEZCLIPBOARD_SANITIZED_WRITEZDURABLE_STORAGEZFLASHZGEOLOCATIONZMIDIZ
MIDI_SYSEXNFCZNOTIFICATIONSZPAYMENT_HANDLERZPERIODIC_BACKGROUND_SYNCZPROTECTED_MEDIA_IDENTIFIERZSENSORSZVIDEO_CAPTUREZIDLE_DETECTIONZWAKE_LOCK_SCREENZWAKE_LOCK_SYSTEMr   r!   r   r   r   r   r   r5   e   s0   r5   c                   @  s,   e Zd ZdZdZdZdd Zedd ZdS )	PermissionSettingZgrantedZdeniedpromptc                 C  s   | j S r   r'   r   r   r   r   r      s    zPermissionSetting.to_jsonc                 C  s   | |S r   r   r   r   r   r   r      s    zPermissionSetting.from_jsonN)	r   r   r    ZGRANTEDZDENIEDZPROMPTr   r!   r   r   r   r   r   r7      s   r7   c                   @  s^   e Zd ZU dZded< dZded< dZded< dZded	< dZded
< dd Z	e
dd ZdS )PermissionDescriptorz
    Definition of PermissionDescriptor defined in the Permissions API:
    https://w3c.github.io/permissions/#dictdef-permissiondescriptor.
    r	   nameNtyping.Optional[bool]sysexuser_visible_onlytyping.Optional[str]type_allow_without_sanitizationc                 C  sd   t  }| j|d< | jd k	r$| j|d< | jd k	r8| j|d< | jd k	rL| j|d< | jd k	r`| j|d< |S )Nr:   r<   userVisibleOnlytypeallowWithoutSanitization)r2   r:   r<   r=   r?   r@   r3   r   r   r   r      s    








zPermissionDescriptor.to_jsonc                 C  sj   | t |d d|kr t|d nd d|kr6t|d nd d|krLt |d nd d|krbt|d nd dS )Nr:   r<   rA   rB   rC   )r:   r<   r=   r?   r@   )r	   boolr   r   r   r   r      s    
zPermissionDescriptor.from_json)r   r   r    r)   r4   r<   r=   r?   r@   r   r!   r   r   r   r   r   r9      s   
r9   c                   @  s>   e Zd ZU dZded< ded< ded< dd Zedd	 Zd
S )Bucketz"
    Chrome histogram bucket.
    r$   lowhighcountc                 C  s(   t  }| j|d< | j|d< | j|d< |S )NrF   rG   rH   )r2   rF   rG   rH   r3   r   r   r   r      s
    


zBucket.to_jsonc                 C  s&   | t |d t |d t |d dS )NrF   rG   rH   )rF   rG   rH   )r$   r   r   r   r   r      s
    


zBucket.from_jsonNr   r   r    r)   r4   r   r!   r   r   r   r   r   rE      s   
rE   c                   @  sF   e Zd ZU dZded< ded< ded< ded< d	d
 Zedd ZdS )	Histogramz
    Chrome histogram.
    r	   r:   r$   sum_rH   ztyping.List[Bucket]bucketsc                 C  s<   t  }| j|d< | j|d< | j|d< dd | jD |d< |S )Nr:   sumrH   c                 S  s   g | ]}|  qS r   r   .0ir   r   r   
<listcomp>   s     z%Histogram.to_json.<locals>.<listcomp>rL   )r2   r:   rK   rH   rL   r3   r   r   r   r      s    


zHistogram.to_jsonc                 C  s6   | t |d t|d t|d dd |d D dS )Nr:   rM   rH   c                 S  s   g | ]}t |qS r   )rE   r   rO   r   r   r   rR      s     z'Histogram.from_json.<locals>.<listcomp>rL   )r:   rK   rH   rL   )r	   r$   r   r   r   r   r      s    


zHistogram.from_jsonNrI   r   r   r   r   rJ      s   
rJ   r>   z!typing.Optional[BrowserContextID]z0typing.Generator[T_JSON_DICT, T_JSON_DICT, None])
permissionsettingoriginbrowser_context_idr   c                 c  sV   t  }|  |d< | |d< |dk	r.||d< |dk	rB| |d< d|d}|V }dS )a  
    Set permission settings for given origin.

    **EXPERIMENTAL**

    :param permission: Descriptor of permission to override.
    :param setting: Setting of the permission.
    :param origin: *(Optional)* Origin the permission applies to, all origins if not specified.
    :param browser_context_id: *(Optional)* Context to override. When omitted, default browser context is used.
    rS   rT   NrU   browserContextIdzBrowser.setPermissionmethodparamsr2   r   )rS   rT   rU   rV   rZ   cmd_dictr   r   r   r   set_permission  s    r]   ztyping.List[PermissionType])permissionsrU   rV   r   c                 c  sP   t  }dd | D |d< |dk	r(||d< |dk	r<| |d< d|d}|V }dS )	aa  
    Grant specific permissions to the given origin and reject all others.

    **EXPERIMENTAL**

    :param permissions:
    :param origin: *(Optional)* Origin the permission applies to, all origins if not specified.
    :param browser_context_id: *(Optional)* BrowserContext to override permissions. When omitted, default browser context is used.
    c                 S  s   g | ]}|  qS r   rN   rO   r   r   r   rR   .  s     z%grant_permissions.<locals>.<listcomp>r^   NrU   rW   zBrowser.grantPermissionsrX   r[   )r^   rU   rV   rZ   r\   r   r   r   r   grant_permissions  s    r_   )rV   r   c                 c  s.   t  }| dk	r|  |d< d|d}|V }dS )z
    Reset all permission management for all origins.

    **EXPERIMENTAL**

    :param browser_context_id: *(Optional)* BrowserContext to reset permissions. When omitted, default browser context is used.
    NrW   zBrowser.resetPermissionsrX   r[   )rV   rZ   r\   r   r   r   r   reset_permissions:  s    
r`   r	   )behaviorrV   download_pathr   c                 c  sF   t  }| |d< |dk	r"| |d< |dk	r2||d< d|d}|V }dS )a?  
    Set the behavior when downloading a file.

    **EXPERIMENTAL**

    :param behavior: Whether to allow all or deny all download requests, or use default Chrome behavior if available (otherwise deny). ``allowAndName`` allows download and names files according to their dowmload guids.
    :param browser_context_id: *(Optional)* BrowserContext to set download behavior. When omitted, default browser context is used.
    :param download_path: *(Optional)* The default path to save downloaded files to. This is requred if behavior is set to 'allow' or 'allowAndName'.
    ra   NrW   ZdownloadPathzBrowser.setDownloadBehaviorrX   r[   )ra   rV   rb   rZ   r\   r   r   r   r   set_download_behaviorN  s    rc   r
   c                  c  s   ddi} | V }dS )z#
    Close browser gracefully.
    rY   zBrowser.closeNr   r\   r   r   r   r   closei  s     re   c                  c  s   ddi} | V }dS )zC
    Crashes browser on the main thread.

    **EXPERIMENTAL**
    rY   zBrowser.crashNr   rd   r   r   r   crashs  s     rf   c                  c  s   ddi} | V }dS )z4
    Crashes GPU process.

    **EXPERIMENTAL**
    rY   zBrowser.crashGpuProcessNr   rd   r   r   r   crash_gpu_process  s     rg   zQtyping.Generator[T_JSON_DICT, T_JSON_DICT, typing.Tuple[str, str, str, str, str]]c                  c  sD   ddi} | V }t |d t |d t |d t |d t |d fS )a,  
    Returns version information.

    :returns: A tuple with the following items:

        0. **protocolVersion** - Protocol version.
        1. **product** - Product name.
        2. **revision** - Product revision.
        3. **userAgent** - User-Agent.
        4. **jsVersion** - V8 version.
    rY   zBrowser.getVersionZprotocolVersionproductrevisionZ	userAgentZ	jsVersionr	   rd   r   r   r   get_version  s     




rk   z<typing.Generator[T_JSON_DICT, T_JSON_DICT, typing.List[str]]c                  c  s    ddi} | V }dd |d D S )z
    Returns the command line switches for the browser process if, and only if
    --enable-automation is on the commandline.

    **EXPERIMENTAL**

    :returns: Commandline parameters
    rY   zBrowser.getBrowserCommandLinec                 S  s   g | ]}t |qS r   rj   rO   r   r   r   rR     s     z,get_browser_command_line.<locals>.<listcomp>	argumentsr   rd   r   r   r   get_browser_command_line  s
    
 rm   r;   zBtyping.Generator[T_JSON_DICT, T_JSON_DICT, typing.List[Histogram]])querydeltar   c                 c  sH   t  }| dk	r| |d< |dk	r&||d< d|d}|V }dd |d D S )	aS  
    Get Chrome histograms.

    **EXPERIMENTAL**

    :param query: *(Optional)* Requested substring in name. Only histograms which have query as a substring in their name are extracted. An empty or absent query returns all histograms.
    :param delta: *(Optional)* If true, retrieve delta since last call.
    :returns: Histograms.
    Nrn   ro   zBrowser.getHistogramsrX   c                 S  s   g | ]}t |qS r   )rJ   r   rO   r   r   r   rR     s     z"get_histograms.<locals>.<listcomp>Z
histogramsr2   )rn   ro   rZ   r\   r   r   r   r   get_histograms  s    rq   z5typing.Generator[T_JSON_DICT, T_JSON_DICT, Histogram])r:   ro   r   c                 c  s<   t  }| |d< |dk	r||d< d|d}|V }t|d S )z
    Get a Chrome histogram by name.

    **EXPERIMENTAL**

    :param name: Requested histogram name.
    :param delta: *(Optional)* If true, retrieve delta since last call.
    :returns: Histogram.
    r:   Nro   zBrowser.getHistogramrX   Z	histogram)r2   rJ   r   )r:   ro   rZ   r\   r   r   r   r   get_histogram  s    rr   z2typing.Generator[T_JSON_DICT, T_JSON_DICT, Bounds])	window_idr   c                 c  s0   t  }|  |d< d|d}|V }t|d S )z
    Get position and size of the browser window.

    **EXPERIMENTAL**

    :param window_id: Browser window id.
    :returns: Bounds information of the window. When window state is 'minimized', the restored window position and size are returned.
    windowIdzBrowser.getWindowBoundsrX   bounds)r2   r   r+   r   )rs   rZ   r\   r   r   r   r   get_window_bounds  s    rv   z typing.Optional[target.TargetID]zJtyping.Generator[T_JSON_DICT, T_JSON_DICT, typing.Tuple[WindowID, Bounds]])	target_idr   c                 c  sF   t  }| dk	r|  |d< d|d}|V }t|d t|d fS )a  
    Get the browser window that contains the devtools target.

    **EXPERIMENTAL**

    :param target_id: *(Optional)* Devtools agent host id. If called as a part of the session, associated targetId is used.
    :returns: A tuple with the following items:

        0. **windowId** - Browser window id.
        1. **bounds** - Bounds information of the window. When window state is 'minimized', the restored window position and size are returned.
    NZtargetIdzBrowser.getWindowForTargetrX   rt   ru   )r2   r   r#   r   r+   )rw   rZ   r\   r   r   r   r   get_window_for_target  s    rx   )rs   ru   r   c                 c  s2   t  }|  |d< | |d< d|d}|V }dS )a5  
    Set position and/or size of the browser window.

    **EXPERIMENTAL**

    :param window_id: Browser window id.
    :param bounds: New window bounds. The 'minimized', 'maximized' and 'fullscreen' states cannot be combined with 'left', 'top', 'width' or 'height'. Leaves unspecified fields unchanged.
    rt   ru   zBrowser.setWindowBoundsrX   Nr[   )rs   ru   rZ   r\   r   r   r   r   set_window_bounds  s    ry   )badge_labelimager   c                 c  s:   t  }| dk	r| |d< |dk	r&||d< d|d}|V }dS )z
    Set dock tile details, platform-specific.

    **EXPERIMENTAL**

    :param badge_label: *(Optional)*
    :param image: *(Optional)* Png encoded image.
    NZ
badgeLabelr{   zBrowser.setDockTilerX   rp   )rz   r{   rZ   r\   r   r   r   r   set_dock_tile.  s    r|   )NN)NN)N)NN)NN)N)N)NN)&
__future__r   utilr   r   Zdataclassesr   enumtyping r   r	   r   r$   r#   Enumr%   r+   r5   r7   r9   rE   rJ   r]   r_   r`   rc   re   rf   rg   rk   rm   rq   rr   rv   rx   ry   r|   r   r   r   r   <module>   s\   ,.%        
      