U
    gB                     @  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
 ddl	mZ eG dd	 d	ZeG d
d dZeG dd dZG dd dejZG dd dej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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G d&d' d'ejZeG d(d) d)ZeG d*d+ d+Zd=d,d-d.d/d0d1d2d3Zd4d5d6d7Z d4d5d8d9Z!ed:eG d;d< d<Z"dS )>    )annotations   )event_classT_JSON_DICT)	dataclassN)network)pagec                   @  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 )AffectedCookiezL
    Information about a cookie that is affected by an inspector issue.
    strnamepathdomainc                 C  s(   t  }| j|d< | j|d< | j|d< |S )Nr   r   r   )dictr   r   r   selfjson r   Q/tmp/pip-unpacked-wheel-3ysq0mf8/selenium/webdriver/common/devtools/v85/audits.pyto_json   s
    


zAffectedCookie.to_jsonc                 C  s&   | t |d t |d t |d dS )Nr   r   r   )r   r   r   )r
   clsr   r   r   r   	from_json#   s
    


zAffectedCookie.from_jsonN__name__
__module____qualname____doc____annotations__r   classmethodr   r   r   r   r   r	      s   
r	   c                   @  s:   e Zd ZU dZded< dZded< dd Zed	d
 ZdS )AffectedRequestzM
    Information about a request that is affected by an inspector issue.
    network.RequestId
request_idNtyping.Optional[str]urlc                 C  s,   t  }| j |d< | jd k	r(| j|d< |S )N	requestIdr#   )r   r!   r   r#   r   r   r   r   r   6   s
    

zAffectedRequest.to_jsonc                 C  s,   | t j|d d|kr$t|d nd dS )Nr$   r#   )r!   r#   )r   Z	RequestIdr   r
   r   r   r   r   r   =   s    zAffectedRequest.from_json)	r   r   r   r   r   r#   r   r   r   r   r   r   r   r   ,   s   
r   c                   @  s.   e Zd ZU dZded< dd Zedd ZdS )	AffectedFramezE
    Information about the frame affected by an inspector issue.
    zpage.FrameIdframe_idc                 C  s   t  }| j |d< |S )NframeId)r   r&   r   r   r   r   r   r   L   s    zAffectedFrame.to_jsonc                 C  s   | t j|d dS )Nr'   )r&   )r   ZFrameIdr   r   r   r   r   r   Q   s    zAffectedFrame.from_jsonNr   r   r   r   r   r%   E   s
   
r%   c                   @  s(   e Zd ZdZdZdd Zedd ZdS )SameSiteCookieExclusionReasonZ&ExcludeSameSiteUnspecifiedTreatedAsLaxZExcludeSameSiteNoneInsecurec                 C  s   | j S Nvaluer   r   r   r   r   \   s    z%SameSiteCookieExclusionReason.to_jsonc                 C  s   | |S r)   r   r   r   r   r   r   _   s    z'SameSiteCookieExclusionReason.from_jsonN)r   r   r   Z,EXCLUDE_SAME_SITE_UNSPECIFIED_TREATED_AS_LAXZEXCLUDE_SAME_SITE_NONE_INSECUREr   r   r   r   r   r   r   r(   X   s
   r(   c                   @  s@   e 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 )SameSiteCookieWarningReasonZ'WarnSameSiteUnspecifiedCrossSiteContextZWarnSameSiteNoneInsecureZ%WarnSameSiteUnspecifiedLaxAllowUnsafeZ$WarnSameSiteStrictLaxDowngradeStrictZ&WarnSameSiteStrictCrossDowngradeStrictZ#WarnSameSiteStrictCrossDowngradeLaxZ#WarnSameSiteLaxCrossDowngradeStrictZ WarnSameSiteLaxCrossDowngradeLaxc                 C  s   | j S r)   r*   r,   r   r   r   r   n   s    z#SameSiteCookieWarningReason.to_jsonc                 C  s   | |S r)   r   r   r   r   r   r   q   s    z%SameSiteCookieWarningReason.from_jsonN)r   r   r   Z-WARN_SAME_SITE_UNSPECIFIED_CROSS_SITE_CONTEXTZWARN_SAME_SITE_NONE_INSECUREZ+WARN_SAME_SITE_UNSPECIFIED_LAX_ALLOW_UNSAFEZ*WARN_SAME_SITE_STRICT_LAX_DOWNGRADE_STRICTZ,WARN_SAME_SITE_STRICT_CROSS_DOWNGRADE_STRICTZ)WARN_SAME_SITE_STRICT_CROSS_DOWNGRADE_LAXZ)WARN_SAME_SITE_LAX_CROSS_DOWNGRADE_STRICTZ&WARN_SAME_SITE_LAX_CROSS_DOWNGRADE_LAXr   r   r   r   r   r   r   r-   d   s   r-   c                   @  s(   e Zd ZdZdZdd Zedd ZdS )SameSiteCookieOperationZ	SetCookieZ
ReadCookiec                 C  s   | j S r)   r*   r,   r   r   r   r   z   s    zSameSiteCookieOperation.to_jsonc                 C  s   | |S r)   r   r   r   r   r   r   }   s    z!SameSiteCookieOperation.from_jsonN)r   r   r   Z
SET_COOKIEZREAD_COOKIEr   r   r   r   r   r   r   r.   v   s
   r.   c                   @  sj   e Zd ZU dZded< ded< ded< 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 )SameSiteCookieIssueDetailsz
    This information is currently necessary, as the front-end has a difficult
    time finding a specific cookie. With this, we can convey specific error
    information without the cookie.
    r	   cookiez(typing.List[SameSiteCookieWarningReason]cookie_warning_reasonsz*typing.List[SameSiteCookieExclusionReason]cookie_exclusion_reasonsr.   	operationNr"   site_for_cookies
cookie_url typing.Optional[AffectedRequest]requestc                 C  s   t  }| j |d< dd | jD |d< dd | jD |d< | j |d< | jd k	r^| j|d< | jd k	rr| j|d	< | jd k	r| j |d
< |S )Nr0   c                 S  s   g | ]}|  qS r   r   .0ir   r   r   
<listcomp>   s     z6SameSiteCookieIssueDetails.to_json.<locals>.<listcomp>cookieWarningReasonsc                 S  s   g | ]}|  qS r   r8   r9   r   r   r   r<      s     cookieExclusionReasonsr3   siteForCookies	cookieUrlr7   )	r   r0   r   r1   r2   r3   r4   r5   r7   r   r   r   r   r      s    




z"SameSiteCookieIssueDetails.to_jsonc                 C  s   | t |d dd |d D dd |d D t|d d|krNt|d nd d	|krdt|d	 nd d
|kr|t|d
 nd dS )Nr0   c                 S  s   g | ]}t |qS r   )r-   r   r9   r   r   r   r<      s     z8SameSiteCookieIssueDetails.from_json.<locals>.<listcomp>r=   c                 S  s   g | ]}t |qS r   )r(   r   r9   r   r   r   r<      s     r>   r3   r?   r@   r7   )r0   r1   r2   r3   r4   r5   r7   )r	   r   r.   r
   r   r   r   r   r   r      s    z$SameSiteCookieIssueDetails.from_json)r   r   r   r   r   r4   r5   r7   r   r   r   r   r   r   r   r/      s   
r/   c                   @  s,   e Zd ZdZdZdZdd Zedd ZdS )	MixedContentResolutionStatusZMixedContentBlockedZ!MixedContentAutomaticallyUpgradedZMixedContentWarningc                 C  s   | j S r)   r*   r,   r   r   r   r      s    z$MixedContentResolutionStatus.to_jsonc                 C  s   | |S r)   r   r   r   r   r   r      s    z&MixedContentResolutionStatus.from_jsonN)	r   r   r   ZMIXED_CONTENT_BLOCKEDZ$MIXED_CONTENT_AUTOMATICALLY_UPGRADEDZMIXED_CONTENT_WARNINGr   r   r   r   r   r   r   rA      s   rA   c                   @  s   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ZdZdZdZdZdd Zedd ZdS ) MixedContentResourceTypeZAudioZBeaconZ	CSPReportDownloadZEventSourceZFaviconZFontZFormZFrameZImageZImportZManifestZPingZ
PluginDataZPluginResourceZPrefetchResourceZScriptZServiceWorkerZSharedWorkerZ
StylesheetZTrackZVideoZWorkerZXMLHttpRequestXSLTc                 C  s   | j S r)   r*   r,   r   r   r   r      s    z MixedContentResourceType.to_jsonc                 C  s   | |S r)   r   r   r   r   r   r      s    z"MixedContentResourceType.from_jsonN) r   r   r   ZAUDIOZBEACONZ
CSP_REPORTZDOWNLOADZEVENT_SOURCEZFAVICONZFONTZFORMFRAMEZIMAGEZIMPORTZMANIFESTZPINGZPLUGIN_DATAZPLUGIN_RESOURCEZPREFETCHZRESOURCEZSCRIPTZSERVICE_WORKERZSHARED_WORKERZ
STYLESHEETZTRACKZVIDEOZWORKERZXML_HTTP_REQUESTrE   r   r   r   r   r   r   r   rB      s:   rB   c                   @  s^   e Zd ZU ded< ded< 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 )MixedContentIssueDetailsrA   resolution_statusr
   insecure_urlmain_resource_urlNz)typing.Optional[MixedContentResourceType]resource_typer6   r7   typing.Optional[AffectedFrame]framec                 C  st   t  }| j |d< | j|d< | j|d< | jd k	r@| j |d< | jd k	rX| j |d< | jd k	rp| j |d< |S )NresolutionStatusinsecureURLmainResourceURLresourceTyper7   rM   )r   rH   r   rI   rJ   rK   r7   rM   r   r   r   r   r      s    




z MixedContentIssueDetails.to_jsonc              
   C  sp   | t |d t|d t|d d|kr8t|d nd d|krPt|d nd d|krht|d nd dS )NrN   rO   rP   rQ   r7   rM   )rH   rI   rJ   rK   r7   rM   )rA   r   r
   rB   r   r%   r   r   r   r   r   
  s    

z"MixedContentIssueDetails.from_json)
r   r   r   r   rK   r7   rM   r   r   r   r   r   r   r   rG      s   
rG   c                   @  s8   e Zd ZdZdZdZdZdZdZdd Z	e
d	d
 ZdS )BlockedByResponseReasonz
    Enum indicating the reason a response has been blocked. These reasons are
    refinements of the net error BLOCKED_BY_RESPONSE.
    Z CoepFrameResourceNeedsCoepHeaderZ+CoopSandboxedIFrameCannotNavigateToCoopPageZCorpNotSameOriginZ1CorpNotSameOriginAfterDefaultedToSameOriginByCoepZCorpNotSameSitec                 C  s   | j S r)   r*   r,   r   r   r   r   !  s    zBlockedByResponseReason.to_jsonc                 C  s   | |S r)   r   r   r   r   r   r   $  s    z!BlockedByResponseReason.from_jsonN)r   r   r   r   Z%COEP_FRAME_RESOURCE_NEEDS_COEP_HEADERZ3COOP_SANDBOXED_I_FRAME_CANNOT_NAVIGATE_TO_COOP_PAGEZCORP_NOT_SAME_ORIGINZ;CORP_NOT_SAME_ORIGIN_AFTER_DEFAULTED_TO_SAME_ORIGIN_BY_COEPZCORP_NOT_SAME_SITEr   r   r   r   r   r   r   rR     s   rR   c                   @  sB   e Zd ZU dZded< ded< dZded< d	d
 Zedd ZdS )BlockedByResponseIssueDetailsz
    Details for a request that has been blocked with the BLOCKED_BY_RESPONSE
    code. Currently only used for COEP/COOP, but may be extended to include
    some CSP errors in the future.
    r   r7   rR   reasonNrL   rM   c                 C  s>   t  }| j |d< | j |d< | jd k	r:| j |d< |S )Nr7   rT   rM   )r   r7   r   rT   rM   r   r   r   r   r   6  s    
z%BlockedByResponseIssueDetails.to_jsonc                 C  s8   | t |d t|d d|kr0t|d nd dS )Nr7   rT   rM   )r7   rT   rM   )r   r   rR   r%   r   r   r   r   r   >  s
    z'BlockedByResponseIssueDetails.from_json)	r   r   r   r   r   rM   r   r   r   r   r   r   r   rS   )  s   
rS   c                   @  s(   e Zd ZdZdZdd Zedd ZdS )HeavyAdResolutionStatusZHeavyAdBlockedZHeavyAdWarningc                 C  s   | j S r)   r*   r,   r   r   r   r   K  s    zHeavyAdResolutionStatus.to_jsonc                 C  s   | |S r)   r   r   r   r   r   r   N  s    z!HeavyAdResolutionStatus.from_jsonN)r   r   r   ZHEAVY_AD_BLOCKEDZHEAVY_AD_WARNINGr   r   r   r   r   r   r   rU   G  s
   rU   c                   @  s,   e Zd ZdZdZdZdd Zedd ZdS )	HeavyAdReasonZNetworkTotalLimitZCpuTotalLimitZCpuPeakLimitc                 C  s   | j S r)   r*   r,   r   r   r   r   X  s    zHeavyAdReason.to_jsonc                 C  s   | |S r)   r   r   r   r   r   r   [  s    zHeavyAdReason.from_jsonN)	r   r   r   ZNETWORK_TOTAL_LIMITZCPU_TOTAL_LIMITZCPU_PEAK_LIMITr   r   r   r   r   r   r   rV   S  s   rV   c                   @  s:   e Zd ZU ded< ded< ded< dd Zed	d
 ZdS )HeavyAdIssueDetailsrU   
resolutionrV   rT   r%   rM   c                 C  s4   t  }| j |d< | j |d< | j |d< |S )NrX   rT   rM   )r   rX   r   rT   rM   r   r   r   r   r   k  s
    zHeavyAdIssueDetails.to_jsonc                 C  s,   | t |d t|d t|d dS )NrX   rT   rM   )rX   rT   rM   )rU   r   rV   r%   r   r   r   r   r   r  s
    zHeavyAdIssueDetails.from_jsonN)r   r   r   r   r   r   r   r   r   r   r   rW   `  s   
rW   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 )InspectorIssueCodez
    A unique identifier for the type of issue. Each type may use one of the
    optional fields in InspectorIssueDetails to convey more specific
    information about the kind of issue.
    ZSameSiteCookieIssueZMixedContentIssueZBlockedByResponseIssueZHeavyAdIssuec                 C  s   | j S r)   r*   r,   r   r   r   r     s    zInspectorIssueCode.to_jsonc                 C  s   | |S r)   r   r   r   r   r   r     s    zInspectorIssueCode.from_jsonN)r   r   r   r   ZSAME_SITE_COOKIE_ISSUEZMIXED_CONTENT_ISSUEZBLOCKED_BY_RESPONSE_ISSUEZHEAVY_AD_ISSUEr   r   r   r   r   r   r   rY   {  s   rY   c                   @  sV   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d Z	e
dd ZdS )InspectorIssueDetailsz
    This struct holds a list of optional fields with additional information
    specific to the kind of issue. When adding a new issue code, please also
    add a new optional field to this type.
    Nz+typing.Optional[SameSiteCookieIssueDetails]same_site_cookie_issue_detailsz)typing.Optional[MixedContentIssueDetails]mixed_content_issue_detailsz.typing.Optional[BlockedByResponseIssueDetails]!blocked_by_response_issue_detailsz$typing.Optional[HeavyAdIssueDetails]heavy_ad_issue_detailsc                 C  sj   t  }| jd k	r| j |d< | jd k	r6| j |d< | jd k	rN| j |d< | jd k	rf| j |d< |S )NsameSiteCookieIssueDetailsmixedContentIssueDetailsblockedByResponseIssueDetailsheavyAdIssueDetails)r   r[   r   r\   r]   r^   r   r   r   r   r     s    



zInspectorIssueDetails.to_jsonc                 C  sh   | d|krt |d nd d|kr0t|d nd d|krHt|d nd d|kr`t|d nd dS )Nr_   r`   ra   rb   )r[   r\   r]   r^   )r/   r   rG   rS   rW   r   r   r   r   r     s    zInspectorIssueDetails.from_json)r   r   r   r   r[   r   r\   r]   r^   r   r   r   r   r   r   r   rZ     s   
rZ   c                   @  s6   e Zd ZU dZded< ded< dd Zedd	 Zd
S )InspectorIssuez8
    An inspector issue reported from the back-end.
    rY   coderZ   detailsc                 C  s&   t  }| j |d< | j |d< |S )Nrd   re   )r   rd   r   re   r   r   r   r   r     s    zInspectorIssue.to_jsonc                 C  s    | t |d t|d dS )Nrd   re   )rd   re   )rY   r   rZ   r   r   r   r   r     s    zInspectorIssue.from_jsonNr   r   r   r   r   rc     s   
rc   r    r
   ztyping.Optional[float]ztyping.Optional[bool]zXtyping.Generator[T_JSON_DICT, T_JSON_DICT, typing.Tuple[typing.Optional[str], int, int]])r!   encodingquality	size_onlyreturnc                 c  sx   t  }|  |d< ||d< |dk	r*||d< |dk	r:||d< d|d}|V }d|kr^t|d ndt|d	 t|d
 fS )a  
    Returns the response body and size if it were re-encoded with the specified settings. Only
    applies to images.

    :param request_id: Identifier of the network request to get content for.
    :param encoding: The encoding to use.
    :param quality: *(Optional)* The quality of the encoding (0-1). (defaults to 1)
    :param size_only: *(Optional)* Whether to only return the size information (defaults to false).
    :returns: A tuple with the following items:

        0. **body** - *(Optional)* The encoded body as a base64 string. Omitted if sizeOnly is true.
        1. **originalSize** - Size before re-encoding.
        2. **encodedSize** - Size after re-encoding.
    r$   rf   Nrg   ZsizeOnlyzAudits.getEncodedResponse)methodparamsbodyZoriginalSizeZencodedSize)r   r   r
   int)r!   rf   rg   rh   rk   cmd_dictr   r   r   r   get_encoded_response  s    

ro   z0typing.Generator[T_JSON_DICT, T_JSON_DICT, None])ri   c                  c  s   ddi} | V }dS )z\
    Disables issues domain, prevents further issues from being reported to the client.
    rj   zAudits.disableNr   rn   r   r   r   r   disable  s     rq   c                  c  s   ddi} | V }dS )zz
    Enables issues domain, sends the issues collected so far to the client by means of the
    ``issueAdded`` event.
    rj   zAudits.enableNr   rp   r   r   r   enable  s     rr   zAudits.issueAddedc                   @  s*   e Zd ZU ded< edd dddZdS )
IssueAddedrc   issuer   )r   ri   c                 C  s   | t |d dS )Nrt   )rt   )rc   r   r   r   r   r   r     s    zIssueAdded.from_jsonN)r   r   r   r   r   r   r   r   r   r   rs     s   
rs   )NN)#
__future__r   utilr   r   Zdataclassesr   enumtyping r   r   r	   r   r%   Enumr(   r-   r.   r/   rA   rB   rG   rR   rS   rU   rV   rW   rY   rZ   rc   ro   rq   rr   rs   r   r   r   r   <module>   sR   1$0$  '
