1. 소개
이 절은 비규범적이다.
WebDriver는 사용자 에이전트의 내부 상태 조사 및 원격 제어를 위한 프로토콜을 정의한다. 이 명세는 양방향 통신을 도입하여 WebDriver를 확장한다. WebDriver의 엄격한 명령/응답 형식 대신, 이를 통해 이벤트가 사용자 에이전트에서 제어 소프트웨어로 스트리밍될 수 있으므로, 브라우저 DOM의 이벤트 기반 특성에 더 잘 부합한다.
2. 인프라스트럭처
이 명세는 Infra Standard에 의존한다. [INFRA]
네트워크 프로토콜 메시지는 CDDL을 사용하여 정의한다. [RFC8610]
이 명세는 맵인 대기 큐를 정의한다.
이 "이벤트 대기" 작업을 수행하는 더 나은 메커니즘이 분명히 있을 것이다.
병렬로 실행 중인 알고리즘 algorithm이 이벤트 집합 events 및 resume id를 대기할 때:
WebDriver 구성은 다음을 가진 구조체이다:
-
초기에 비어 있는, navigables와 값 사이의 약한 맵인 항목 navigables.
WebDriver 구성은 타입인 연관 타입을 가진다.
WebDriver 구성의 값은 그 구성의 연관 타입인 타입을 가진 값이거나 설정되지 않음이다.
설정되지 않음은 특정 구성 값이 설정되지 않았음을 나타내는 값이다.
참고: 이 알고리즘은 주어진 navigable에 대한 WebDriver 구성에 접근할 수 있게 하며, navigables의 값을 확인한 다음, user contexts를 확인하고 마지막으로 global을 확인한다. 구성이 설정되어 있지 않으면 설정되지 않음을 반환한다.
WebDriver 구성 configuration의 navigable navigable에 대한 WebDriver 구성 값 가져오기를 하려면:
-
top-level traversable을 navigable의 최상위 traversable로 둔다.
-
configuration의 navigables가 top-level traversable을 포함하면:
-
navigable configuration value를 configuration의 navigables[top-level traversable]로 둔다.
-
navigable configuration value가 설정되지 않음이 아니면, navigable configuration value를 반환한다.
-
-
user context를 navigable의 연관된 사용자 컨텍스트로 둔다.
-
configuration의 user contexts가 user context를 포함하면:
-
user context configuration value를 configuration의 user contexts[user context]로 둔다.
-
user context configuration value가 설정되지 않음이 아니면, user context configuration value를 반환한다.
-
-
configuration의 global을 반환한다.
참고: 이는 target별로 WebDriver 구성을 저장하기 위한 일반 알고리즘이다. target은 navigable, 사용자 컨텍스트 중 하나일 수 있으며, target이 null이거나 생략된 경우 전역으로 저장한다.
제공되지 않은 경우 null인 선택적 target에 WebDriver 구성 configuration의 값 value를 저장하려면, 여기서 target은 navigable, 사용자 컨텍스트 또는 null이다:
-
target이 null이면, configuration의 global을 value로 설정한다.
-
target이 사용자 컨텍스트이면, configuration의 user contexts[target]를 value로 설정한다.
-
target이 navigable이면, configuration의 navigables[target]를 value로 설정한다.
참고: 이 일반 알고리즘은
command parameters에 "userContexts"와 "contexts"가 있는지에 따라
WebDriver
구성의 값을
global, user contexts, 또는
navigables에 저장한다. 이
매개변수들은
서로 배타적이다. 둘 다 제공되지 않으면, 구성은 전역으로 저장된다.
주어진 command parameters에 대해 WebDriver 구성 configuration의 값 value를 WebDriver 구성 저장하려면:
-
command parameters가 "
userContexts"를 포함하고 command parameters가 "contexts"를 포함하면, 오류를 반환하되, 오류 코드는 invalid argument로 한다. -
affected navigables를 빈 집합으로 둔다.
-
command parameters가 "
contexts"를 포함하면:-
navigables를 command parameters["
contexts"]를 사용하여 id로 유효한 최상위 traversable 가져오기를 시도한 결과로 둔다. -
navigables의 각 navigable에 대해:
-
-
그렇지 않고, command parameters가 "
userContexts"를 포함하면:-
user contexts를 command parameters["
userContexts"]를 사용하여 유효한 사용자 컨텍스트 가져오기를 시도한 결과로 둔다. -
user contexts의 각 user context에 대해:
-
각 top-level traversable에 대해, 그 연관된 사용자 컨텍스트가 user context인 모든 최상위 traversable의 목록에서:
-
top-level traversable을 affected navigables에 추가한다.
-
-
configuration의 value를 user context에 저장한다.
-
-
-
그렇지 않으면:
-
모든 최상위 traversable의 각 top-level traversable에 대해, top-level traversable을 affected navigables에 추가한다.
-
configuration의 value를 저장한다.
-
-
affected navigables를 반환한다.
3. 프로토콜
이 절은 WebDriver BiDi 프로토콜의 기본 개념을 정의한다. 이러한 용어는 전송 계층에서의 표현과는 구별된다.
이 프로토콜은 CDDL 정의를 사용하여 정의한다. 구현자의 편의를 위해 두 개의 별도 CDDL 정의를 정의한다. 즉, 로컬 끝에서 생성되고 원격 끝에서 소비되는 메시지의 형식을 정의하는 원격 끝 정의와, 원격 끝에서 생성되고 로컬 끝에서 소비되는 메시지의 형식을 정의하는 로컬 끝 정의이다.
3.1. 정의
이 절은 원격 끝 정의
및
로컬 끝 정의의
초기 내용을 제공한다.
이들은 명세의 나머지 부분에서 정의된 정의 조각들에 의해
보강된다.
Command= {id: js-uint, CommandData, Extensible, }CommandData= ( BrowserCommand // BrowsingContextCommand // EmulationCommand // InputCommand // NetworkCommand // ScriptCommand // SessionCommand // StorageCommand // WebExtensionCommand )EmptyParams= { Extensible }
Message= ( CommandResponse / ErrorResponse / Event )CommandResponse= {type:"success",id: js-uint,result: ResultData, Extensible }ErrorResponse= {type:"error",id: js-uint / null,error: ErrorCode,message: text, ?stacktrace: text, Extensible }ResultData= ( BrowserResult / BrowsingContextResult / EmulationResult / InputResult / NetworkResult / ScriptResult / SessionResult / StorageResult / WebExtensionResult )EmptyResult= { Extensible }Event= {type:"event", EventData, Extensible }EventData= ( BrowsingContextEvent // InputEvent // LogEvent // NetworkEvent // ScriptEvent )
Extensible= (*text => any)js-int= -9007199254740991..9007199254740991js-uint= 0..9007199254740991
3.2. 세션
WebDriver BiDi는 WebDriver의 세션 개념을 확장한다.
세션은 별도로 명시하지 않는 한 false인 BiDi 플래그를 가진다.
BiDi 세션은 세션이며, 그 BiDi 플래그가 true로 설정되어 있다.
3.3. 모듈
WebDriver BiDi 프로토콜은 모듈로 구성된다.
각 모듈은 사용자 에이전트의 특정 측면과 관련된 명령 및 이벤트의 모음을 나타낸다. 예를 들어, 모듈은 DOM을 검사하고 조작하는 기능이나 스크립트 실행 기능을 포함할 수 있다.
각 모듈은 문자열인 모듈 이름을 가진다. 모듈에 정의된
명령과 이벤트의 명령 이름 및
이벤트 이름은
모듈 이름으로 시작하고 그 뒤에 마침표
"."가 온다.
명령을 포함하는 모듈은 원격 끝 정의
조각을 정의한다. 이 조각은 모듈의
명령에 대해 CommandData 그룹에 선택지를
제공하며,
추가 정의 속성도 정의할 수 있다. 또한 모듈의 명령 결과에 대해 ResultData 그룹에
추가 선택지를 제공하는 로컬 끝 정의
조각을 정의할 수도 있다.
이벤트를 포함하는 모듈은 모듈의 이벤트에 대해 Event
그룹의
선택지인 로컬 끝 정의
조각을 정의한다.
구현은 확장 모듈을 정의할 수 있다.
이러한 모듈은
단일 콜론 ":" 문자를 포함하는 모듈 이름을
가져야 한다. 콜론 앞부분은 접두사이며, 이는 일반적으로 주어진 구현에 특화된 모든
확장 모듈에서 동일하고,
주어진 구현에 대해 고유해야 한다.
다른 명세는 프로토콜을 확장하는 자체 WebDriver-BiDi 모듈을 정의할 수 있다.
그러한 모듈은 콜론(:) 문자를 포함하는 이름을 가져서는 안 되며,
해당 문자를 포함하는 명령
이름, 이벤트 이름, 또는 속성
이름을 정의해서도 안 된다.
외부 명세의 저자는 기존 모듈을 확장하기보다 새 모듈을 추가하는 것이 권장된다. 기존 모듈을 확장하고자 하는 경우에는, 해당 확장을 원래 모듈 정의를 포함하는 명세에 직접 통합하는 것이 바람직하다.
3.4. 명령
명령은 비동기 동작으로, 로컬 끝에서 요청하고 원격 끝에서 실행되며, 그 결과로 결과 또는 오류가 로컬 끝에 반환된다. 여러 명령은 동시에 실행될 수 있으며, 명령은 잠재적으로 오래 실행될 수 있다. 그 결과, 명령은 순서와 다르게 완료될 수 있다.
각 명령은 다음으로 정의된다:
-
원격 끝 정의조각이 포함하는 그룹으로 정의되는 명령 타입. 그러한 각 그룹은 두 필드를 가진다:-
method. 이는[module name].[method name]형식의 문자열 리터럴이다. 이것이 명령 이름이다. -
params. 이는 명령에 전달될 데이터를 포함하는 매핑을 정의한다. 이 맵의 채워진 값이 명령 매개변수이다.
-
-
로컬 끝 정의조각으로 정의되는 결과 타입. -
BiDi 세션과 명령 매개변수가 주어진 명령에 대해 수행할 동작을 정의하고, 명령 결과 타입의 인스턴스를 반환하는 원격 끝 단계의 집합.
활성 세션 없이 실행될 수 있는 명령은 정적 명령이다. 정의에서 명시하지 않는 한 명령은 정적 명령이 아니다.
명령이 로컬 끝에서 전송될 때, 명령은 명령 id를 가진다. 이는 특정 명령의 응답을 식별하기 위해 로컬 끝이 사용하는 식별자이다. 원격 끝의 관점에서 이 식별자는 불투명하며, 명령을 식별하기 위해 내부적으로 사용할 수 없다.
참고: 이는 명령 id가 전적으로 로컬 끝에 의해 제어되고, 세션 과정에서 반드시 고유한 것은 아니기 때문이다. 예를 들어 모든 응답을 무시하는 로컬 끝은 각 명령에 동일한 명령 id를 사용할 수 있다.
모든 명령 이름의 집합은 정의된 모든 명령 이름을 포함하는 집합이며, 확장 모듈에 속한 것도 포함한다.
3.5. 오류
WebDriver BiDi는 WebDriver의 오류 코드 집합을 다음 추가 코드로 확장한다:
- invalid web extension
- 유효하지 않은 웹 확장을 설치하려고 했다.
- no such client window
- 알 수 없는 클라이언트 창과 상호작용하려고 했다.
- no such handle
- 알 수 없는
RemoteObjectReference를 역직렬화하려고 했다. - no such history entry
- 알 수 없는 세션 히스토리 항목으로 이동하려고 했다.
- no such network collector
- 알 수 없는 컬렉터를 제거하려고 했다.
- no such intercept
- 알 수 없는 네트워크 인터셉트를 제거하려고 했다.
- no such network data
- 알 수 없는 네트워크 데이터를 참조하려고 했다.
- no such node
- 알 수 없는
SharedReference를 역직렬화하려고 했다. - no such request
- 알 수 없는 요청을 계속하려고 했다.
- no such script
- 알 수 없는 프리로드 스크립트를 제거하려고 했다.
- no such storage partition
- 존재하지 않는 저장소 파티션의 데이터에 접근하려고 했다.
- no such user context
- 알 수 없는 사용자 컨텍스트를 참조하려고 했다.
- no such web extension
- 알 수 없는 웹 확장을 참조하려고 했다.
- unable to close browser
- 브라우저를 닫으려고 했지만 실패했다.
- unable to set cookie
- 쿠키를 만들려고 했지만 사용자 에이전트가 거부했다.
- underspecified storage partition
- 충분히 지정되지 않은 저장소 파티션의 데이터와 상호작용하려고 했다.
- unable to set file input
- 파일 입력을 설정하려고 했지만 실패했다.
- unavailable network data
- 수집되지 않았거나 이미 제거된 네트워크 데이터를 가져오려고 했다.
ErrorCode="invalid argument"/"invalid selector"/"invalid session id"/"invalid web extension"/"move target out of bounds"/"no such alert"/"no such network collector"/"no such element"/"no such frame"/"no such handle"/"no such history entry"/"no such intercept"/"no such network data"/"no such node"/"no such request"/"no such script"/"no such storage partition"/"no such user context"/"no such web extension"/"session not created"/"unable to capture screen"/"unable to close browser"/"unable to set cookie"/"unable to set file input"/"unavailable network data"/"underspecified storage partition"/"unknown command"/"unknown error"/"unsupported operation"
3.6. 이벤트
이벤트는 원격 끝에서 로컬 끝으로 전송되는 알림으로, 원격 끝에서 관심 있는 일이 발생했음을 알린다.
-
이벤트 타입은 그룹을 포함하는
로컬 끝 정의조각으로 정의된다. 그러한 각 그룹은 두 필드를 가진다:-
method. 이는[module name].[event name]형식의 문자열 리터럴이다. 이것이 이벤트 이름이다. -
params. 이는 이벤트 데이터를 포함하는 매핑을 정의한다. 이 맵의 채워진 값이 이벤트 매개변수이다.
-
-
이벤트가 언제 트리거되는지와 이벤트 타입 데이터를 구성하는 단계를 정의하는 원격 끝 이벤트 트리거.
-
선택적으로, 로컬 끝이 이벤트를 구독할 때 수행할 단계를 정의하는 원격 끝 구독 단계의 집합. 정의된 경우 이러한 단계는 연관된 구독 우선순위를 가지며, 이는 여러 이벤트가 한 번에 활성화될 때 단계가 실행되는 순서를 제어하는 정수이고, 더 낮은 정수는 더 먼저 실행되는 단계를 나타낸다.
BiDi 세션은 로컬 끝에 발급되었지만 아직 구독 해제되지 않은 모든 구독 id의 집합인 알려진 구독 id를 가진다.
구독은 구조체이며, 구독 id(문자열), 이벤트 이름(이벤트 이름의 집합), 최상위 traversable id(최상위 traversable ID의 집합) 및 사용자 컨텍스트 id(사용자 컨텍스트 ID의 집합)로 구성된다.
구독 subscription은 subscription의 최상위 traversable id가 빈 집합이고 subscription의 사용자 컨텍스트 id가 빈 집합이면 전역이다.
event name 및 navigables가 주어졌을 때 이벤트가 활성화된 세션의 집합은 다음과 같다:
-
sessions를 새 집합으로 둔다.
-
활성 BiDi 세션의 각 session에 대해:
-
session, event name 및 navigables로 이벤트가 활성화되어 있으면, session을 sessions에 추가한다.
-
-
sessions를 반환한다.
주어진 session, event name 및 navigables에 대해 이벤트가 활성화되어 있는지 결정하려면:
참고: 공유 워커는 여러 컨텍스트와 연관될 수 있으므로, navigables는 집합이다.
-
top-level traversables를 navigables로 최상위 traversable 가져오기를 수행한 결과로 둔다.
-
session의 구독에 있는 각 subscription에 대해:
-
subscription이 전역이면 true를 반환한다.
-
사용자 컨텍스트 id가 비어 있지 않으면:
-
top-level traversables의 각 navigable에 대해:
-
subscription의 사용자 컨텍스트 id가 navigable의 연관된 사용자 컨텍스트의 사용자 컨텍스트 id를 포함하면, true를 반환한다.
-
-
-
그렇지 않으면:
-
subscription top-level traversables를 subscription의 최상위 traversable id로 id로 navigable 가져오기를 수행한 결과로 둔다.
-
top-level traversables와 subscription top-level traversables의 교집합이 비어 있지 않으면 true를 반환한다.
-
-
false를 반환한다.
event name 및 session이 주어졌을 때 이벤트가 활성화된 최상위 traversable의 집합은 다음과 같다:
-
result를 새 집합으로 둔다.
-
session의 구독에 있는 각 subscription에 대해:
-
subscription이 전역이면:
-
원격 끝의 최상위 traversable에 있는 각 traversable에 대해:
-
traversable을 result에 추가한다.
-
-
중단한다.
-
-
그렇지 않고, 사용자 컨텍스트 id가 비어 있지 않으면:
-
원격 끝의 최상위 traversable에 있는 각 traversable에 대해:
-
subscription의 사용자 컨텍스트 id가 traversable의 연관된 사용자 컨텍스트의 사용자 컨텍스트 id를 포함하면, traversable을 result에 추가한다.
-
-
-
그렇지 않으면:
-
top-level traversables를 subscription의 최상위 traversable id로 id로 navigable 가져오기를 수행한 결과로 둔다.
-
top-level traversables의 각 항목을 result에 추가한다.
-
-
result를 반환한다.
4. 전송
메시지 전송은 WebSocket 프로토콜을 사용하여 제공된다. [RFC6455]
참고: WebSocket 프로토콜의 용어로는, 로컬 끝이 클라이언트이고 원격 끝이 서버 / 원격 호스트이다.
참고: 명령과 이벤트를 메시지로 인코딩하는 방식은 JSON-RPC와 유사하지만, 이 명세는 이를 규범적으로 참조하지 않는다. [JSON-RPC] 대신 원격 끝에 대한 규범적 요구사항은 정밀한 처리 모델로 주어지며, 로컬 끝에 대해서는 규범적 요구사항이 주어지지 않는다.
WebSocket 리스너는 들어오는 WebSocket 연결을 받아들일 수 있는 네트워크 엔드포인트이다.
WebSocket 리스너는 호스트, 포트, 보안 플래그, 그리고 WebSocket 리소스 목록을 가진다.
WebSocket 리스너 listener가 생성될 때, 원격 끝은 listener의 호스트 및 포트로 주어진 호스트와 포트에서 WebSocket 연결 수신을 시작해야 한다. listener의 보안 플래그가 설정되어 있으면, listener에서 수립된 연결은 TLS로 암호화되어야 한다.
원격 끝은 집합인 WebSocket 리스너의 활성 리스너를 가지며, 이는 처음에 비어 있다.
원격 끝은 집합인 세션과 연결되지 않은 WebSocket 연결을 가지며, 이는 처음에 비어 있다.
WebSocket 연결은 WebSocket 프로토콜의 요구사항을 따르는 네트워크 연결이다
BiDi 세션은 그 원소가 WebSocket 연결인 집합의 세션 WebSocket 연결을 가진다. 이는 처음에 비어 있다.
BiDi 세션 session은 session의 세션 WebSocket 연결이 connection을 포함하면 connection과 연결되어 있다.
참고: 각 WebSocket 연결은 최대 하나의 BiDi 세션과 연결된다.
클라이언트가 WebSocket 연결을 수립하여 활성 리스너 집합 중 하나인 listener에 연결할 때, 구현은 WebSocket 서버 측 요구사항에 따라 진행해야 하며, 들어오는 연결을 수락할지 결정할 때 다음 단계를 실행한다:
-
resource name을 클라이언트의 opening handshake 읽기에서 얻은 리소스 이름으로 둔다. resource name이 listener의 WebSocket 리소스 목록에 없으면, 이 단계의 실행을 중지하고 요청된 서비스를 사용할 수 없는 것처럼 동작한다.
-
resource name이 바이트 문자열 "
/session"이고, 구현이 BiDi 전용 세션을 지원하면:-
연결을 수락할지 결정하기 위해 구현 정의의 다른 단계를 실행하고, 수락하지 않으면 이 단계의 실행을 중지하고 요청된 서비스를 사용할 수 없는 것처럼 동작한다.
-
연결을 세션과 연결되지 않은 WebSocket 연결에 추가한다.
-
반환한다.
-
-
resource name으로 WebSocket 리소스에 대한 세션 ID 가져오기를 수행하고, session id를 그 값으로 둔다. session id가 null이면 이 단계의 실행을 중지하고 요청된 서비스를 사용할 수 없는 것처럼 동작한다.
-
활성 세션 목록에 session id를 그 세션 ID로 가지는 세션이 있으면, session을 그 세션으로 둔다. 그렇지 않으면 이 단계의 실행을 중지하고 요청된 서비스를 사용할 수 없는 것처럼 동작한다.
-
연결을 수락할지 결정하기 위해 구현 정의의 다른 단계를 실행하고, 수락하지 않으면 이 단계의 실행을 중지하고 요청된 서비스를 사용할 수 없는 것처럼 동작한다.
-
그렇지 않으면 connection을 session의 세션 WebSocket 연결에 추가하고, 서버가 들어오는 연결을 수락하기로 선택할 때의 WebSocket 서버 측 요구사항으로 진행한다.
WebSocket 메시지가 수신되었을 때, 타입 type 및 데이터 data를 가진 WebSocket 연결 connection에 대해, 원격 끝은 connection, type, data가 주어졌을 때 들어오는 메시지 처리를 해야 한다.
WebSocket closing handshake가 시작될 때 또는 WebSocket 연결이 닫힐 때, WebSocket 연결 connection에 대해, 원격 끝은 connection이 주어졌을 때 연결 닫힘 처리를 해야 한다.
참고: closing handshake 없이 WebSocket 연결이 닫힐 수 있으므로 두 조건이 모두 필요하다.
세션 session이 주어졌을 때 WebSocket 리소스 이름 구성을 하려면:
-
session이 null이면, "
/session"을 반환한다 -
문자열 "
/session/"과 session의 세션 ID를 연결한 결과를 반환한다.
WebSocket 리스너 listener 및 세션 session이 주어졌을 때 WebSocket URL 구성을 하려면:
-
resource name을 session으로 WebSocket 리소스 이름 구성을 수행한 결과로 둔다.
-
WebSocket URI를 반환한다. 이는 호스트를 listener의 호스트로, 포트를 listener의 포트로, 경로를 resource name으로 설정하여 구성하며, listener의 보안 플래그가 설정되어 있으면 wss-URI 구성을 따르고, 그렇지 않으면 ws-URL 구성을 따른다.
resource name이 주어졌을 때 WebSocket 리소스에 대한 세션 ID 가져오기를 하려면:
-
resource name이 바이트 문자열 "
/session/"으로 시작하지 않으면 null을 반환한다. -
session id를 resource name에서 "
/session/" 접두사 뒤의 바이트로 둔다. -
session id가 UUID의 문자열 표현이 아니면 null을 반환한다.
-
session id를 반환한다.
-
활성 리스너에 원격 끝이 재사용하고자 하는 기존 WebSocket 리스너가 있으면, listener를 그 리스너로 둔다. 그렇지 않으면 listener를 구현 정의 호스트, 포트, 보안 플래그, 그리고 빈 WebSocket 리소스 목록을 가진 새 WebSocket 리스너로 둔다.
-
resource name을 session으로 WebSocket 리소스 이름 구성을 수행한 결과로 둔다.
-
resource name을 listener의 WebSocket 리소스 목록에 추가한다.
-
listener를 반환한다.
참고: 여러 세션을 처리하는 중개 노드는 하나 또는 여러 WebSocket 리스너를 사용할 수 있다. WebDriver는 엔드포인트 노드가 한 번에 최대 하나의 세션을 지원한다고 정의하므로, 단일 리스너만 가질 것으로 예상된다.
참고: 엔드포인트
노드의 경우 위 단계의 호스트는
일반적으로 "localhost"이다.
-
type이 text가 아니면, connection, null 및 invalid argument가 주어졌을 때 오류 응답 전송을 하고, 마지막으로 반환한다.
-
단언: data는 스칼라 값 문자열이다. 그렇지 않으면 WebSocket의 UTF-8로 인코딩된 데이터의 오류 처리가 이미 WebSocket 연결을 실패시켰을 것이기 때문이다.
UTF-8 오류에 어떤 상태 코드를 사용하는지는 아무것도 정의하지 않는 듯하다.
-
connection과 연결된 BiDi 세션이 있으면, session을 그 세션으로 둔다. 그렇지 않고 connection이 세션과 연결되지 않은 WebSocket 연결에 있으면, session을 null로 둔다. 그렇지 않으면 반환한다.
-
parsed를 data가 주어졌을 때 JSON을 Infra 값으로 파싱한 결과로 둔다. 이것이 예외를 던지면, connection, null 및 invalid argument가 주어졌을 때 오류 응답 전송을 하고, 마지막으로 반환한다.
-
session이 null이 아니고 활성 세션에 없으면 반환한다.
-
parsed를
원격 끝 정의와 대조한다. 이것이 일치하면:-
matched를 일치한 데이터를 나타내는 맵으로 둔다.
-
단언: matched는 "
id", "method" 및 "params"를 포함한다. -
command id를 matched["
id"]로 둔다. -
method를 matched["
method"]로 둔다 -
command를 method라는 명령 이름을 가진 명령으로 둔다.
-
session이 null이고 command가 정적 명령이 아니면, connection, command id, 그리고 invalid session id가 주어졌을 때 오류 응답 전송을 하고 반환한다.
-
다음 단계를 병렬로 실행한다:
-
result를 session 및 명령 매개변수 matched["
params"]가 주어졌을 때 command의 원격 끝 단계를 실행한 결과로 둔다. -
result가 오류이면, connection, command id, 그리고 result의 오류 코드가 주어졌을 때 오류 응답 전송을 하고, 마지막으로 반환한다.
-
value를 result의 데이터로 둔다.
-
method가 "
session.new"이면, session을 활성 세션 목록에서 그 세션 ID가 value의 "sessionId" 속성과 같은 항목으로 두고, connection을 session의 세션 WebSocket 연결에 추가하며, connection을 세션과 연결되지 않은 WebSocket 연결에서 제거한다. -
response를
로컬 끝 정의의CommandResponse생성규칙과 일치하는 새 맵으로 둔다. 이때id필드는 command id로 설정하고value필드는 value로 설정한다. -
serialized를 response가 주어졌을 때 infra 값을 JSON 바이트로 직렬화한 결과로 둔다.
-
serialized로 구성된 WebSocket 메시지를 전송하되, connection을 통해 전송한다.
-
-
-
그렇지 않으면:
-
command id를 null로 둔다.
-
parsed가 맵이고 parsed["
id"]가 존재하며 0 이상의 정수이면, command id를 그 정수로 설정한다. -
error code를 invalid argument로 둔다.
-
parsed가 맵이고 parsed["
method"]가 존재하며 문자열이지만, parsed["method"]가 모든 명령 이름의 집합에 없으면, error code를 unknown command로 설정한다. -
connection, command id, 그리고 error code가 주어졌을 때 오류 응답 전송을 한다.
-
settings 객체 settings가 주어졌을 때 관련 navigable 가져오기를 하려면:
-
related navigables를 빈 집합으로 둔다.
-
-
navigable을 관련 전역 객체의 연관된
Document의 node navigable로 둔다. -
navigable이 null이 아니면, navigable을 related navigables에 추가한다.
-
-
그렇지 않고 settings로 지정된 전역 객체가
WorkerGlobalScope이면, 그 전역 객체의 소유자 집합의 각 owner에 대해:-
navigable을 null로 둔다.
-
owner가 Document이면, navigable을 owner의 node navigable로 설정한다.
-
navigable이 null이 아니면, navigable을 related navigables에 추가한다.
-
-
related navigables를 반환한다.
컨텍스트 id의 목록 navigable ids가 주어졌을 때 id로 navigable 가져오기를 하려면:
navigable의 목록 navigables가 주어졌을 때 최상위 traversable 가져오기를 하려면:
-
result를 빈 집합으로 둔다.
-
navigables의 각 navigable에 대해:
-
navigable의 최상위 traversable을 result에 추가한다.
-
-
result를 반환한다.
컨텍스트 id의 목록 navigable ids가 주어졌을 때 id로 유효한 navigable 가져오기를 하려면:
-
result를 빈 집합으로 둔다.
-
navigable ids의 각 navigable id에 대해:
-
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
navigable을 result에 추가한다.
-
-
데이터 result와 함께 성공을 반환한다.
컨텍스트 id의 목록 navigable ids가 주어졌을 때 id로 유효한 최상위 traversable 가져오기를 하려면:
-
result를 빈 집합으로 둔다.
-
navigable ids의 각 navigable id에 대해:
-
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
navigable이 최상위 traversable이 아니면, 오류를 반환하되 오류 코드는 invalid argument로 한다.
-
navigable을 result에 추가한다.
-
-
데이터 result와 함께 성공을 반환한다.
-
단언: body는
Event생성규칙과 일치한다. -
serialized를 body가 주어졌을 때 infra 값을 JSON 바이트로 직렬화한 결과로 둔다.
-
session의 세션 WebSocket 연결에 있는 각 connection에 대해:
-
serialized로 구성된 WebSocket 메시지를 전송하되, connection을 통해 전송한다.
-
-
error data를
로컬 끝 정의의ErrorResponse생성규칙과 일치하는 새 맵으로 둔다. 이때id필드는 command id로 설정하고,error필드는 error code로 설정하며,message필드는 발생한 오류에 대한 사람이 읽을 수 있는 정의를 포함하는 구현 정의 문자열로 설정하고,stacktrace필드는 오류가 발생한 시점의 활성 스택 프레임에 대한 스택 추적 보고서를 포함하는 구현 정의 문자열로 선택적으로 설정한다. -
response를 error data가 주어졌을 때 infra 값을 JSON 바이트로 직렬화한 결과로 둔다.
참고: command id는 null일 수 있으며, 이 경우
id필드도 response에서 생략되지 않고 null로 설정된다. -
response로 구성된 WebSocket 메시지를 전송하되, connection을 통해 전송한다.
WebSocket 연결 connection이 주어졌을 때 연결 닫힘 처리를 하려면:
-
-
connection을 session의 세션 WebSocket 연결에서 제거한다.
-
그렇지 않고, 세션과 연결되지 않은 WebSocket 연결이 connection을 포함하면, connection을 그 집합에서 제거한다.
참고: 이는 어떤 세션도 종료하지 않는다.
session이 주어졌을 때 WebSocket 연결 닫기를 하려면:
-
session의 세션 WebSocket 연결에 있는 각 connection에 대해:
-
connection으로 WebSocket closing handshake를 시작한다.
참고: 이는 connection에 대해 연결 닫힘 처리 단계가 실행되도록 하며, 이 단계는 connection과 관련된 리소스를 정리한다.
-
4.1. 연결 수립
WebDriver 클라이언트는 값이 true인 WebSocket URL 기능을 요청하여 양방향 연결을 선택한다.
-
flags가 "
bidi"를 포함하면 반환한다. -
webSocketUrl을 capabilities에서 "
webSocketUrl"이라는 이름의 속성 가져오기를 수행한 결과로 둔다. -
webSocketUrl이 undefined이면 반환한다.
-
단언: webSocketUrl은 true이다.
-
listener를 session이 주어졌을 때 WebSocket 연결 수신 시작을 수행한 결과로 둔다.
-
webSocketUrl을 listener 및 session으로 WebSocket URL 구성을 수행한 결과로 설정한다.
-
capabilities에 "
webSocketUrl"이라는 이름의 속성 설정을 하여 webSocketUrl로 설정한다. -
session의 BiDi 플래그를 true로 설정한다.
-
"
bidi"를 flags에 추가한다.
구현은 클라이언트가 BiDi 세션이면서 HTTP 세션이 아닌 세션을 수립할 수도 있게 해야 한다. 이 경우 WebSocket 서버의 URL은 대역 외로 전달된다. 이를 허용하는 구현은 BiDi 전용 세션을 지원한다. 그러한 구현이 WebDriver 세션을 시작하는 요청을 받아들일 준비가 된 시점에, 다음을 해야 한다:
-
null이 주어졌을 때 WebSocket 연결 수신 시작을 한다.
5. 샌드박스화된 스크립트 실행
자동화 도구의 일반적인 요구사항은 문서의 DOM에 접근할 수 있지만, 해당 문서를 포함하는 navigable에서 실행 중인 스크립트가 DOM API에 적용한 변경에 관한 정보는 갖지 않는 스크립트를 실행하는 것이다.
BiDi 세션은 샌드박스 맵을 가지며, 이는
키가 Window
객체이고, 값이 문자열과
SandboxWindowProxy
객체 사이의 맵인 약한 맵이다.
참고: 여기서의 샌드박스 정의는 기존 구현의 동작을 성문화하려는 시도이다. 이는 이전에 명세에서 내부적인 것으로 간주되던 구현의 일부, 특히 플랫폼 객체의 내부 상태(일반적으로 브라우저 엔진의 주 구현 언어에서 네이티브 객체로 구현됨)와 ECMAScript에서 보이는 상태 사이의 구별을 드러낸다. 기존 샌드박스 구현은 엔진의 낮은 수준에서 이루어지기 때문에, 구현들이 명세의 모든 세부사항으로 수렴하는 것은 느린 과정일 수 있다. 그동안 구현자는 명세와의 차이에 대한 자세한 문서를 제공하는 것이 권장되며, 이 기능의 사용자는 샌드박스에서 실행되는 스크립트가 모든 구현에서 작동하는지 명시적으로 테스트하는 것이 권장된다.
5.1. 샌드박스 렐름
각 샌드박스는 고유한 ECMAScript Realm이다. 그러나 샌드박스 렐름은
Window
렐름에 있는 플랫폼 객체에
SandboxProxy
객체를 통해 접근할 수 있게 한다.
-
name이 빈 문자열이면, 오류를 반환하되 오류 코드는 invalid argument로 한다.
-
window를 navigable의 활성 window로 둔다.
-
sandboxes를 샌드박스 맵[window]로 둔다.
-
sandboxes가 name을 포함하지 않으면, sandboxes[name]을 navigable로 샌드박스 렐름 생성을 수행한 결과로 설정한다.
-
데이터 sandboxes[name]와 함께 성공을 반환한다.
샌드박스 렐름의 생성을 정의한다. 이는 window를 래핑하는
SandboxWindowProxy를
반환하게 된다.
target realm이 주어졌을 때 샌드박스 이름 가져오기를 하려면:
5.2. 샌드박스 프록시 객체
SandboxProxy 객체는 다른 렐름의 객체에 대한
샌드박스화된 접근을 중재하는 이국적 객체이다. 샌드박스 프록시 객체는
다음 제한을 강제하도록 설계되어 있다:
-
플랫폼 객체에는 접근할 수 있지만, 속성 접근은 Web IDL로 정의된 속성만 반환하고 ECMAScript로 정의된 속성은 반환하지 않는다(기저 인터페이스에 없는 "expando" 속성이나, 기저 인터페이스의 속성을 가리는 ECMAScript 정의 속성 모두).
-
속성을 설정하면 Web IDL로 정의된 setter 단계가 실행되거나 프록시 객체에 속성이 설정된다. 이는 샌드박스 외부에서 작성된 속성은 접근할 수 없지만, 인터페이스 멤버는 일반적인 방식으로 사용할 수 있음을 의미한다.
SandboxProxy
인터페이스 객체는 없다.
SandboxProxy가
어떻게 동작하는지 자세히 정의한다
-
object가
SandboxProxy또는SandboxWindowProxy인 동안, object를 그것의 래핑된 객체로 설정한다. -
object를 반환한다.
5.3. SandboxWindowProxy
SandboxWindowProxy는
Window
객체가 SandboxProxy
객체로 래핑된 것을 나타내는 이국적 객체이다. 이는
Window
전역에서 해당 데이터에 대한 샌드박스화된 접근을 제공한다.
6. 사용자 컨텍스트
사용자 컨텍스트는 원격 끝 내의 0개 이상의 최상위 traversable 모음을 나타낸다. 각 사용자 컨텍스트는 연관된 저장소 파티션을 가지므로, 원격 끝 데이터는 서로 다른 사용자 컨텍스트 사이에서 공유되지 않는다.
이것이 사용자 컨텍스트 개념이나 저장소와의 상호작용을 형식적으로 정의하는 최선의 방법인지 불분명하다.
참고: Infra 명세는 "user agent"라는 용어를 사용자 컨텍스트와 같은 개념을 지칭하는 데 사용한다. 그러나 이는 여러 사용자 컨텍스트를 가진 전체 웹 클라이언트를 의미하는 "user agent"라는 용어의 사용과 호환되지 않는다. 이 차이는 웹 콘텐츠에는 보이지 않지만, WebDriver를 통해 관찰되므로, 여기서는 이 용어 사용을 피한다.
사용자 컨텍스트는 사용자 컨텍스트 id를 가지며, 이는 사용자 컨텍스트 생성 시 설정되는 고유한 문자열이다.
navigable은 연관된 사용자 컨텍스트를 가지며, 이는 사용자 컨텍스트이다.
새 최상위 traversable이 생성될 때, 그 연관된 사용자 컨텍스트는 사용자 컨텍스트 집합의 한 사용자 컨텍스트로 설정된다.
참고: 어떤 경우에는 최상위 traversable이 생성될 때 사용자 컨텍스트가 명세에 의해 설정된다. 그러나 그러한 요구사항이 없는 경우, 연관된 사용자 컨텍스트는 최상위 traversable에 대해 구현 정의이다.
null이 아닌 opener를 가진 최상위 traversable이 opener와 동일한 연관된 사용자 컨텍스트를 가진다고 명시해야 하는가? 기존 구현이 이를 강제하는지 확인해야 한다.
자식 navigable의 연관된 사용자 컨텍스트는 그것의 부모의 연관된 사용자 컨텍스트이다.
어떤 사용자 컨텍스트가 어떠한 최상위 traversable의 연관된 사용자 컨텍스트도 아니면, 이는 빈 사용자 컨텍스트이다.
기본 사용자
컨텍스트는 사용자
컨텍스트이며, 사용자 컨텍스트 id가 "default"이다.
구현은 사용자 컨텍스트 집합을 가지며, 이는 사용자 컨텍스트의 집합이다. 처음에는 기본 사용자 컨텍스트를 포함한다.
구현은 예를 들어 사용자 동작에 대한 응답으로 언제든지 새 사용자 컨텍스트를 사용자 컨텍스트 집합에 추가할 수 있다.
참고: 여기서 "언제든지"는 구현 시작 중도 포함하므로, 주어진 구현은 항상 사용자 컨텍스트 집합에 여러 항목을 가질 수 있다.
구현은 기본 사용자 컨텍스트를 제외하고, 빈 사용자 컨텍스트를 언제든지 사용자 컨텍스트 집합에서 제거할 수 있다. 그러나 그러한 사용자 컨텍스트를 제거해야 하는 것은 아니다. 사용자 컨텍스트가 빈 사용자 컨텍스트가 아니면 사용자 컨텍스트 집합에서 제거되어서는 안 된다.
BiDi 세션은 사용자 컨텍스트에서 안전하지 않은 인증서 허용 재정의로의 맵을 가지며, 이는 사용자 컨텍스트와 boolean 사이의 맵이다.
BiDi 세션은 사용자 컨텍스트에서 프록시 구성으로의 맵을 가지며, 이는 사용자 컨텍스트와 프록시 구성 사이의 맵이다.
에뮬레이트된 네트워크 조건 구조체는 다음을 가진 구조체이다:
-
boolean 또는 null인 offline이라는 이름의 항목.
BiDi 세션은 에뮬레이트된 네트워크 조건을 가지며, 이는 구조체로, 에뮬레이트된 네트워크 조건 구조체 또는 null인 기본 네트워크 조건이라는 이름의 항목, 사용자 컨텍스트와 에뮬레이트된 네트워크 조건 구조체 사이의 약한 맵인 사용자 컨텍스트 네트워크 조건이라는 이름의 항목, 그리고 navigable과 에뮬레이트된 네트워크 조건 구조체 사이의 약한 맵인 navigable 네트워크 조건이라는 이름의 항목을 가진다.
사용자 컨텍스트가 사용자 컨텍스트 집합에서 제거되면, 사용자 컨텍스트 구독 제거를 한다.
사용자 컨텍스트 구독 제거를 하려면:
-
활성 세션의 각 session에 대해:
-
subscriptions to remove를 집합으로 둔다.
-
session의 구독에 있는 각 subscription에 대해:
-
subscription의 사용자 컨텍스트 id가 navigable의 연관된 사용자 컨텍스트의 사용자 컨텍스트 id를 포함하면:
-
navigable의 연관된 사용자 컨텍스트의 사용자 컨텍스트 id를 subscription의 사용자 컨텍스트 id에서 제거한다.
-
subscription의 사용자 컨텍스트 id가 비어 있으면:
-
subscription을 subscriptions to remove에 추가한다.
-
-
-
-
-
사용자 컨텍스트 집합의 각 user context에 대해:
-
user context의 사용자 컨텍스트 id가 user context id와 같으면:
-
user context를 반환한다.
-
-
null을 반환한다.
user context ids가 주어졌을 때 유효한 사용자 컨텍스트 가져오기를 하려면:
-
result를 빈 집합으로 둔다.
-
user context ids의 각 user context id에 대해:
-
user context를 user context id로 사용자 컨텍스트 가져오기를 수행한 결과로 설정한다.
-
user context가 null이면, 오류를 반환하되 오류 코드는 no such user context로 한다.
-
user context를 result에 추가한다.
-
-
result를 반환한다.
7. 모듈
7.1. session 모듈
session 모듈은 원격 끝의 상태를 모니터링하기 위한 명령 및 이벤트를 포함한다.
7.1.1. 정의
SessionCommand = (
session.End //
session.New //
session.Status //
session.Subscribe //
session.Unsubscribe
)
SessionResult = (
session.EndResult /
session.NewResult /
session.StatusResult /
session.SubscribeResult /
session.UnsubscribeResult
)
-
session을 활성 세션에서 제거한다.
-
활성 세션이 비어 있으면, webdriver-active 플래그를 false로 설정한다.
session이 주어졌을 때 세션 정리를 하려면:
-
session으로 WebSocket 연결 닫기를 한다.
-
사용자 컨텍스트 집합의 각 user context에 대해:
-
session의 사용자 컨텍스트에서 안전하지 않은 인증서 허용 재정의로의 맵[user context]를 제거한다.
-
session의 사용자 컨텍스트에서 프록시 구성으로의 맵[user context]를 제거한다.
-
-
session의 차단된 요청 맵에 있는 각 request id → (request, phase, response)에 대해:
-
"
continue request", request id 및 (response, "incomplete")로 재개한다.
-
-
session의 네트워크 컬렉터에 있는 각 collector에 대해:
-
collector id를 collector의 컬렉터로 둔다.
-
수집된 네트워크 데이터의 각 collected data에 대해, collected data 및 collector id로 데이터에서 컬렉터 제거를 한다.
-
-
활성 세션이 비어 있으면, 원격 끝 상태 정리를 한다.
-
구현별 정리 단계를 수행한다.
7.1.2. 타입
7.1.2.1. session.CapabilitiesRequest 타입
session.CapabilitiesRequest= { ?alwaysMatch: session.CapabilityRequest, ?firstMatch: [*session.CapabilityRequest] }
session.CapabilitiesRequest 타입은 세션에 대해 요청된 기능을 나타낸다.
7.1.2.2. session.CapabilityRequest 타입
session.CapabilityRequest= { ?acceptInsecureCerts: bool, ?browserName: text, ?browserVersion: text, ?platformName: text, ?proxy: session.ProxyConfiguration, ?unhandledPromptBehavior: session.UserPromptHandler, Extensible }
session.CapabilityRequest 타입은 요청된 기능의 특정 집합을
나타낸다.
WebDriver BiDi는 추가 WebDriver 기능을 정의한다. 다음 표는 각 구현이 WebDriver BiDi에 대해 지원해야 하는 기능을 열거한다.
| 기능: | WebSocket URL |
|---|---|
| 키: | "webSocketUrl"
|
| 값 타입: | boolean |
| 설명: | 현재 세션의 양방향 연결 지원을 정의한다. |
webSocketUrl" 기능에 대한
추가 기능 역직렬화
알고리즘은 매개변수 value에 대해 다음과 같다:
-
value가 boolean이 아니면, 오류를 반환하되, 코드는 invalid argument로 한다.
-
데이터 value와 함께 성공을 반환한다.
webSocketUrl" 기능에 대한 일치한 기능 직렬화
알고리즘은 매개변수 value에 대해 다음과 같다:
7.1.2.3. session.ProxyConfiguration 타입
session.ProxyConfiguration= { session.AutodetectProxyConfiguration // session.DirectProxyConfiguration // session.ManualProxyConfiguration // session.PacProxyConfiguration // session.SystemProxyConfiguration }session.AutodetectProxyConfiguration= (proxyType:"autodetect", Extensible )session.DirectProxyConfiguration= (proxyType:"direct", Extensible )session.ManualProxyConfiguration= (proxyType:"manual", ?httpProxy: text, ?sslProxy: text, ? session.SocksProxyConfiguration, ?noProxy: [*text], Extensible )session.SocksProxyConfiguration= (socksProxy: text,socksVersion: 0..255, )session.PacProxyConfiguration= (proxyType:"pac",proxyAutoconfigUrl: text, Extensible )session.SystemProxyConfiguration= (proxyType:"system", Extensible )
7.1.2.4. session.UserPromptHandler 타입
session.UserPromptHandler= { ?alert: session.UserPromptHandlerType, ?beforeUnload: session.UserPromptHandlerType, ?confirm: session.UserPromptHandlerType, ?default: session.UserPromptHandlerType, ?file: session.UserPromptHandlerType, ?prompt: session.UserPromptHandlerType, }
session.UserPromptHandler 타입은
사용자 프롬프트 핸들러의 구성을 나타낸다.
참고: file은 파일 선택기를 처리한다.
"accept"와 "dismiss"는 선택기를 닫는다. "ignore"는 선택기를 열린 상태로 유지한다.
7.1.2.5. session.UserPromptHandlerType 타입
session.UserPromptHandlerType="accept"/"dismiss"/"ignore";
session.UserPromptHandlerType 타입은
사용자 프롬프트 핸들러의 동작을 나타낸다.
7.1.2.6. session.Subscription 타입
session.Subscription = text
session.Subscription 타입은 고유한 구독 식별자를 나타낸다.
7.1.2.7. session.SubscribeParameters 타입
session.SubscribeParameters= {events: [+text], ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], }
session.SubscribeParameters 타입은 특정 이벤트 집합을
구독하기 위한 요청을 나타낸다.
7.1.2.8. session.UnsubscribeByIDRequest 타입
session.UnsubscribeByIDRequest= {subscriptions: [+session.Subscription], }
session.UnsubscribeByIDRequest 타입은 구독 ID로 식별된
이벤트 구독을 제거하기 위한 요청을 나타낸다.
7.1.2.9. session.UnsubscribeByAttributesRequest 타입
session.UnsubscribeByAttributesRequest= {events: [+text], }
session.UnsubscribeByAttributesRequest 타입은
구독 속성을 사용하여 구독 해제하기 위한 요청을 나타낸다.
7.1.3. 명령
7.1.3.1. session.status 명령
session.status 명령은 원격 끝이 새 세션을 만들 수 있는 상태인지에 관한 정보를 반환하지만, 추가로 구현에 특화된 임의의 메타 정보를 포함할 수도 있다.
이는 정적 명령이다.
- 명령 타입
-
session.Status= (method:"session.status",params: EmptyParams, ) - 반환 타입
-
session.StatusResult= {ready: bool,message: text, }
session 및 command parameters가 주어졌을 때 원격 끝 단계는 다음과 같다:
7.1.3.2. session.new 명령
session.new 명령은 새 BiDi 세션을 만들 수 있게 한다.
참고: 이 방식으로 생성된 세션은 HTTP를 통해 접근할 수 없다.
이는 정적 명령이다.
- 명령 타입
-
session.New= (method:"session.new",params: session.NewParameters )session.NewParameters= {capabilities: session.CapabilitiesRequest } - 반환 타입
-
session.NewResult= {sessionId: text,capabilities: {acceptInsecureCerts: bool,browserName: text,browserVersion: text,platformName: text,setWindowRect: bool,userAgent: text, ?proxy: session.ProxyConfiguration, ?unhandledPromptBehavior: session.UserPromptHandler, ?webSocketUrl: text, Extensible } }
session 및 command parameters가 주어졌을 때 원격 끝 단계는 다음과 같다:
-
session이 null이 아니면, 오류 코드 session not created인 오류를 반환한다.
-
어떤 이유로든 구현이 새 세션을 시작할 수 없으면, 오류 코드 session not created인 오류를 반환한다.
-
flags를 "
bidi"를 포함하는 집합으로 둔다. -
capabilities json을 command parameters 및 flags로 기능 처리를 시도한 결과로 둔다.
-
capabilities를 capabilities json으로 JSON 파생 JavaScript 값을 Infra 값으로 변환한 결과로 둔다.
-
session의 BiDi 플래그를 true로 설정한다.
참고: 이 세션에 대한 연결은 호출자에 의해 현재 연결로 설정된다.
-
body를
session.NewResult생성규칙과 일치하는 새 맵으로 둔다. 이때sessionId필드는 session의 세션 ID로 설정하고,capabilities필드는 capabilities로 설정한다. -
데이터 body와 함께 성공을 반환한다.
7.1.3.3. session.end 명령
session.end 명령은 현재 세션을 종료한다.
- 명령 타입
-
session.End= (method:"session.end",params: EmptyParams ) - 반환 타입
-
session.EndResult= EmptyResult
session 및 command parameters가 주어졌을 때 원격 끝 단계는 다음과 같다:
-
session으로 세션 종료를 한다.
-
데이터 null과 함께 성공을 반환하고, 병렬로 다음 단계를 실행한다:
-
이 명령에 대한 응답으로 WebSocket 메시지 전송 단계가 호출될 때까지 기다린다.
이는 다소 부정확한 표현이지만, 의도는 연결 종료를 시작하기 전에 명령에 대한 응답을 전송한다는 점이 명확하기를 바란다.
-
session으로 세션 정리를 한다.
-
7.1.3.4. session.subscribe 명령
session.subscribe 명령은 특정 이벤트를 전역으로 또는 navigable 집합에 대해 활성화한다.
- 명령 타입
-
session.Subscribe= (method:"session.subscribe",params: session.SubscribeParameters ) - 반환 타입
-
session.SubscribeResult= {subscription: session.Subscription, }
-
event names를 빈 집합으로 둔다.
-
command parameters["
events"]의 각 항목 name에 대해, event names를 event names와 name으로 이벤트 이름 집합 얻기를 시도한 결과의 합집합으로 둔다. -
input user context ids를 command parameters[
userContexts]로 집합 생성을 수행한 결과로 둔다. -
input context ids를 command parameters[
contexts]로 집합 생성을 수행한 결과로 둔다. -
input user context ids가 비어 있지 않고 input context ids도 비어 있지 않으면, 오류를 반환하되, 오류 코드는 invalid argument로 한다.
-
subscription navigables를 집합으로 둔다.
-
top-level traversable context ids를 집합으로 둔다.
-
input context ids가 비어 있지 않으면:
-
navigables를 input context ids로 id로 유효한 navigable 가져오기를 시도한 결과로 둔다.
-
subscription navigables를 navigables로 최상위 traversable 가져오기를 수행한 결과로 설정한다.
-
subscription navigables의 각 navigable에 대해:
-
navigable의 navigable id를 top-level traversable context ids에 추가한다.
-
-
-
그렇지 않고, input user context ids가 비어 있지 않으면:
-
input user context ids의 각 user context id에 대해:
-
user context를 user context id로 사용자 컨텍스트 가져오기를 수행한 결과로 둔다.
-
user context가 null이면, 오류를 반환하되, 오류 코드는 no such user context로 한다.
-
연관된 사용자 컨텍스트가 user context인 모든 최상위 traversable의 목록에 있는 각 top-level traversable에 대해:
-
top-level traversable을 subscription navigables에 추가한다.
-
-
-
-
그렇지 않으면, subscription navigables를 원격 끝의 모든 최상위 traversable의 집합으로 설정한다.
-
subscription을 구독으로 둔다. 이때 구독 id는 UUID의 문자열 표현으로 설정하고, 이벤트 이름은 event names로 설정하며, 최상위 traversable id는 top-level traversable context ids로 설정하고 사용자 컨텍스트 id는 input user context ids로 설정한다.
-
subscribe step events를 새 맵으로 둔다.
-
event names의 각 event name에 대해:
-
event name이라는 이벤트 이름을 가진 이벤트가 원격 끝 구독 단계를 정의하지 않으면, 계속한다;
-
existing navigables를 session 및 event name으로 이벤트가 활성화된 최상위 traversable의 집합을 수행한 결과로 둔다.
-
subscribe step events[event name]을 subscription navigables와 existing navigables의 차집합으로 설정한다.
-
-
subscription을 session의 구독에 추가한다.
-
키가 event name one 및 event name two인 두 항목이 주어졌을 때, 다음 less than 알고리즘을 사용하여 subscribe step events를 오름차순으로 정렬한다:
-
subscription이 전역이면 include global을 true로 두고, 그렇지 않으면 include global을 false로 둔다.
-
subscribe step events의 각 event name → navigables에 대해:
-
event name이라는 이벤트 이름을 가진 이벤트에 대한 원격 끝 구독 단계를 session, navigables 및 include global이 주어졌을 때 실행한다.
-
-
body를
session.SubscribeResult생성규칙과 일치하는 새 맵으로 둔다. 이때subscription필드는 subscription의 구독 id로 설정한다. -
데이터 body와 함께 성공을 반환한다.
7.1.3.5. session.unsubscribe 명령
session.unsubscribe 명령은 이벤트를 전역으로 또는 navigable 집합에 대해 비활성화한다.
- 명령 타입
-
session.Unsubscribe= (method:"session.unsubscribe",params: session.UnsubscribeParameters, )session.UnsubscribeParameters= session.UnsubscribeByAttributesRequest / session.UnsubscribeByIDRequest - 반환 타입
-
session.UnsubscribeResult= EmptyResult
-
command parameters가 "
subscriptions"를 포함하지 않으면:참고: 이 조건은 command parameters가 session.UnsubscribeByAttributesRequest 생성규칙과 일치함을 의미한다.
-
event names를 빈 집합으로 둔다.
-
command parameters["
events"]의 각 항목 name에 대해, event names를 event names와 name으로 이벤트 이름 집합 얻기를 시도한 결과의 합집합으로 둔다. -
new subscriptions를 목록으로 둔다.
-
matched events를 집합으로 둔다.
-
session의 구독의 각 subscription에 대해:
-
subscription이 전역이 아니면:
-
event names의 각 event name에 대해:
-
subscription event names가 비어 있지 않으면:
-
matched events가 event names와 같지 않으면, 오류를 반환하되 오류 코드는 invalid argument로 한다.
-
session의 구독을 new subscriptions로 설정한다.
-
-
그렇지 않으면:
-
subscriptions를 command parameters[
subscriptions]로 집합 생성을 수행한 결과로 둔다. -
unknown subscription ids를 subscriptions와 session의 알려진 구독 id의 차집합으로 둔다.
-
unknown subscription ids가 비어 있지 않으면:
-
오류를 반환하되, 오류 코드는 invalid argument로 한다.
-
-
subscriptions to remove를 빈 집합으로 둔다.
-
session의 구독에 있는 각 subscription에 대해:
-
session의 알려진 구독 id를 session의 알려진 구독 id와 subscriptions의 차집합으로 설정한다.
-
-
데이터 null과 함께 성공을 반환한다.
7.2. browser 모듈
browser 모듈은 원격 끝 브라우저 프로세스를 관리하기 위한 명령을 포함한다.
7.2.1. 정의
BrowserCommand = (
browser.Close //
browser.CreateUserContext //
browser.GetClientWindows //
browser.GetUserContexts //
browser.RemoveUserContext //
browser.SetClientWindowState //
browser.SetDownloadBehavior
)
BrowserResult = (
browser.CloseResult /
browser.CreateUserContextResult /
browser.GetClientWindowsResult /
browser.GetUserContextsResult /
browser.RemoveUserContextResult /
browser.SetClientWindowStateResult /
browser.SetDownloadBehaviorResult
)
7.2.2. 창
각 최상위 traversable은 하나의 클라이언트
창과 연관되며, 이는 해당 최상위 traversable의 활성 문서를 렌더링하는 데 사용될
뷰포트를 포함하는 직사각형 영역을 나타낸다.
이는 그 가시성 상태가
"visible"일 때 적용되며, traversable 표시와 관련된 브라우저별 사용자 인터페이스 요소
(예: URL 바, 도구 모음, 또는 OS 창 장식)도 포함한다.
클라이언트 창은 그 창을 고유하게 식별하는 문자열인 클라이언트 창 id를 가진다.
클라이언트 창은 x 좌표를 가지며, 이는 웹에 노출된 화면 영역의 왼쪽 가장자리와 창의 왼쪽 가장자리 사이의 CSS 픽셀 수이거나, 특정 창에 대해 그것이 의미가 없으면 0이다.
클라이언트 창은 y 좌표를 가지며, 이는 웹에 노출된 화면 영역의 위쪽 가장자리와 창의 위쪽 가장자리 사이의 CSS 픽셀 수이거나, 특정 창에 대해 그것이 의미가 없으면 0이다.
클라이언트 창은 너비를 가지며, 이는 창 직사각형의 너비를 CSS 픽셀 단위로 나타낸다.
클라이언트 창은 높이를 가지며, 이는 창 직사각형의 높이를 CSS 픽셀 단위로 나타낸다.
window인 클라이언트 창 최대화를 하려면 구현은 플랫폼의 window 최대화 개념에 해당하는 단계를 수행하거나, window의 x 좌표가 가능한 한 0에 가깝고, 그 y 좌표가 가능한 한 0에 가까우며, 그 너비가 웹에 노출된 화면 영역의 너비에 가능한 한 가깝고, 그 높이가 웹에 노출된 화면 영역의 높이에 가능한 한 가깝도록 window의 위치를 지정해야 한다. 이 옵션 중 하나가 지원되면 클라이언트 창 최대화가 지원됨이다.
window인 클라이언트
창 최소화를 하려면 구현은 플랫폼의 window 최소화 개념에 해당하는
단계를 수행하거나, 그렇지 않으면 window를 숨겨
window와 연관된 최상위 traversable의 모든
활성 문서가
가시성 상태
"hidden"을 가지며, window의 너비와 높이가 둘 다 가능한 한 0에 가깝도록 해야 한다.
이 옵션 중 하나가 지원되면 클라이언트 창 최소화가 지원됨이다.
window인 클라이언트
창 복원을 하려면 구현은 그것이 플랫폼 정의의 최대화 상태도,
플랫폼 정의의 최소화 상태도 아니며, window와 연관된
하나 이상의 최상위 traversable이 있는 경우
그중 적어도 하나가 "visible" 상태의
활성 문서를 가지도록 보장해야 한다.
이것이 지원되면 클라이언트
창 복원이 지원됨이다.
window가 주어졌을 때 클라이언트 창 상태 가져오기를 하려면:
-
documents를 빈 목록으로 둔다.
-
visible documents를 빈 목록으로 둔다.
-
각 최상위 traversable traversable에 대해:
-
visible documents의 각 document에 대해:
-
document의 fullscreen 요소가 null이 아니면 "
fullscreen"을 반환한다.
-
-
visible documents가 비어 있고 documents가 비어 있지 않으면, 또는 window가 그 밖에 OS별 최소화 상태이면, "
minimized"를 반환한다.참고: 이는 일반적으로, 하지만 반드시 그런 것은 아니지만, window의 너비와 높이가 0과 같음을 의미한다.
-
window가 OS별 최대화 상태이면 "
maximized"를 반환한다.참고: 이는 일반적으로, 하지만 반드시 그런 것은 아니지만, window의 너비가 웹에 노출된 화면 영역의 너비와 같고 window의 높이가 웹에 노출된 화면 영역의 높이와 같음을 의미한다.
-
"
normal"을 반환한다.
window 및 state가 주어졌을 때 클라이언트 창 상태 설정을 하려면:
-
current state를 window로 클라이언트 창 상태 가져오기를 수행한 결과로 둔다.
-
current state가 "
fullscreen", "maximized" 또는 "minimized"이고 state와 같으면, 데이터 null과 함께 성공을 반환한다. -
다음 조건과 연관된 단계의 목록에서, 연관된 조건이 true인 첫 번째 단계 집합을 실행한다:
- "
fullscreen" - fullscreen이 지원됨이 아니면, 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
- "
normal" - window에 대해 클라이언트 창 복원이 지원됨이 아니면, 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
- "
maximize" - window에 대해 클라이언트 창 최대화가 지원됨이 아니면, 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
- "
minimize" - window에 대해 클라이언트 창 최소화가 지원됨이 아니면, 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
- "
-
documents를 빈 목록으로 둔다.
-
각 최상위 traversable traversable에 대해:
-
documents가 비어 있으면, 오류를 반환하되 오류 코드는 no such client window로 한다.
-
current state가 "
fullscreen"이면:-
documents의 각 document에 대해:
-
document로 fullscreen 완전 종료를 한다.
참고: 이는 fullscreen이 아닌 창의 문서에 대해서는 아무 작업도 하지 않는다.
-
-
-
current state가 "
maximized" 또는 "minimized"이면:-
window를 클라이언트 창 복원한다.
-
-
state의 값에 따라 전환한다:
- "
fullscreen" -
-
documents의 각 document에 대해:
-
document의 가시성 상태가 "
visible"이면, document의 document 요소로 요소를 fullscreen으로 만들기를 한다. -
중단한다.
-
-
- "
maximize" - 1. window를 클라이언트 창 최대화한다.
- "
minimize" - 1. window를 클라이언트 창 최소화한다.
- "
-
데이터 null과 함께 성공을 반환한다.
7.2.3. 타입
7.2.3.1. browser.ClientWindow 타입
browser.ClientWindow = text;
browser.ClientWindow는 클라이언트 창을 고유하게 식별한다.
7.2.3.2. browser.ClientWindowInfo 타입
browser.ClientWindowInfo= {active: bool,clientWindow: browser.ClientWindow,height: js-uint,state:"fullscreen"/"maximized"/"minimized"/"normal",width: js-uint,x: js-int,y: js-int, }
browser.ClientWindowInfo 타입은
클라이언트 창의 속성을 나타낸다.
-
client window id를 client window에 대한 클라이언트 창 id로 둔다.
-
state를 client window로 클라이언트 창 상태 가져오기를 수행한 결과로 둔다.
-
client window가 운영체제로부터 전달되는 키보드 입력을 받을 수 있으면 active를 true로 두고, 그렇지 않으면 active를 false로 둔다.
참고: 이는 최상위 traversable 중 그 클라이언트 창이 client window인 것이 시스템 포커스를 가진다는 의미일 수 있으며, 또는 브라우저 자체의 사용자 인터페이스가 현재 포커스를 가진다는 의미일 수도 있다.
-
client window info를
clientWindow필드는 client window id로,state필드는 state로,x필드는 client window의 x 좌표로,y필드는 client window의 y 좌표로,width필드는 client window의 너비로,height필드는 client window의 높이로, 그리고active필드는 active로 설정한browser.ClientWindowsInfo생성규칙과 일치하는 맵으로 둔다. -
client window info를 반환한다
7.2.3.3. browser.UserContext 타입
browser.UserContext = text;
browser.UserContext는
사용자
컨텍스트를 고유하게 식별한다.
7.2.3.4. browser.UserContextInfo 타입
browser.UserContextInfo= {userContext: browser.UserContext }
browser.UserContextInfo 타입은 사용자 컨텍스트의 속성을 나타낸다.
7.2.4. 명령
7.2.4.1. browser.close 명령
browser.close 명령은 모든 WebDriver 세션을 종료하고 원격 브라우저 인스턴스의 자동화 상태를 정리한다.
- 명령 타입
-
browser.Close= (method:"browser.close",params: EmptyParams, ) - 반환 타입
-
browser.CloseResult= EmptyResult
-
session으로 세션 종료를 한다.
-
활성 세션이 비어 있지 않으면, 구현은 unable to close browser 오류 코드의 오류를 반환할 수 있으며, 그 후 다음 단계를 병렬로 실행한다:
-
이 명령에 대한 응답으로 WebSocket 메시지 전송 단계가 호출될 때까지 기다린다.
-
session으로 세션 정리를 한다.
참고: 브라우저가 여러 자동화 세션을 가진 경우의 동작은 현재 지정되어 있지 않다. 어느 세션이든 브라우저를 닫을 수 있을 수도 있고, 실제로는 마지막으로 열린 세션만 브라우저를 닫을 수 있을 수도 있으며, 또는 처음 시작된 세션만 그럴 수도 있다. 이 동작은 이 명세의 향후 버전에서 완전히 지정될 수 있다.
-
-
활성 세션의 각 active session에 대해:
-
데이터 null과 함께 성공을 반환하고, 다음 단계를 병렬로 실행한다.
-
이 명령에 대한 응답으로 WebSocket 메시지 전송 단계가 호출될 때까지 기다린다.
-
session으로 세션 정리를 한다.
-
최상위 traversable을 언로드 프롬프트 없이 닫는다.
-
자동화 중인 원격 끝과 관련된 리소스를 정리하기 위해 구현 정의 단계를 수행한다.
참고: 예를 들어 여기에는 자동화 중인 브라우저와 관련된 OS 수준 프로세스를 깨끗하게 종료하거나, 원격 끝이 자동화 중에 생성한 사용자 프로필 데이터 같은 임시 상태를 제거하거나, WebSocket 리스너를 종료하는 것이 포함될 수 있다. 브라우저와 운영체제 간의 차이 때문에, 여기서 로컬 끝이 의존할 수 있는 정확한 불변 조건을 자세히 지정하는 것은 불가능하다.
-
7.2.4.2. browser.createUserContext 명령
browser.createUserContext 명령은 사용자 컨텍스트를 생성한다.
- 명령 타입
-
browser.CreateUserContext= (method:"browser.createUserContext",params: browser.CreateUserContextParameters, )browser.CreateUserContextParameters= { ?acceptInsecureCerts: bool, ?proxy: session.ProxyConfiguration, ?unhandledPromptBehavior: session.UserPromptHandler } - 반환 타입
-
browser.CreateUserContextResult= browser.UserContextInfo
session 및 command parameters로 원격 끝 단계는 다음과 같다:
-
user context를 새 사용자 컨텍스트로 둔다.
-
command parameters가 "
acceptInsecureCerts"를 포함하면:참고: "
acceptInsecureCerts"가 설정되면, 안전하지 않은 TLS 허용 플래그의 동작을 재정의한다.-
acceptInsecureCerts를 command parameters["
acceptInsecureCerts"]로 둔다: -
acceptInsecureCerts가 true이고 엔드포인트 노드가 안전하지 않은 TLS 연결 허용을 지원하지 않으면, 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
-
session의 사용자 컨텍스트에서 안전하지 않은 인증서 허용 재정의로의 맵[user context]을 acceptInsecureCerts로 설정한다.
-
-
command parameters가 "
unhandledPromptBehavior"를 포함하면, 처리되지 않은 프롬프트 동작 재정의 맵[user context]을 command parameters["unhandledPromptBehavior"]로 설정한다. -
command parameters가 "
proxy"를 포함하면:-
proxy configuration을 command parameters["
proxy"]로 둔다. -
원격 끝이 사용자 컨텍스트별 프록시 설정을 구성할 수 없거나, proxy configuration으로 프록시를 구성할 수 없으면, 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
-
session의 사용자 컨텍스트에서 프록시 구성으로의 맵[user context]을 proxy configuration으로 설정한다.
-
-
user context를 사용자 컨텍스트 집합에 추가한다.
-
user context info를
userContext필드가 user context의 사용자 컨텍스트 id로 설정된browser.UserContextInfo생성규칙과 일치하는 맵으로 둔다. -
데이터 user context info와 함께 성공을 반환한다.
7.2.4.3. browser.getClientWindows 명령
browser.getClientWindows 명령은 클라이언트 창의 목록을 반환한다.
- 명령 타입
-
browser.GetClientWindows= (method:"browser.getClientWindows",params: EmptyParams, ) - 반환 타입
-
browser.GetClientWindowsResult= {clientWindows: [ * browser.ClientWindowInfo] }
원격 끝 단계는 다음과 같다:
-
client window ids를 빈 집합으로 둔다.
-
client windows를 빈 목록으로 둔다.
-
각 최상위 traversable traversable에 대해:
-
client window를 traversable의 연관된 클라이언트 창으로 둔다
-
client window id를 client window에 대한 클라이언트 창 id로 둔다.
-
client window ids가 client window id를 포함하면 계속한다.
-
client window id를 client window ids에 추가한다.
-
client window info를 client window로 클라이언트 창 정보 가져오기를 수행한 결과로 둔다.
-
client window info를 client windows에 추가한다.
-
-
result를
clientWindows필드가 client windows로 설정된browser.GetClientWindowsResult생성규칙과 일치하는 맵으로 둔다. -
데이터 result와 함께 성공을 반환한다.
7.2.4.4. browser.getUserContexts 명령
browser.getUserContexts 명령은 사용자 컨텍스트의 목록을 반환한다.
- 명령 타입
-
browser.GetUserContexts= (method:"browser.getUserContexts",params: EmptyParams, ) - 반환 타입
-
browser.GetUserContextsResult= {userContexts: [ + browser.UserContextInfo] }
원격 끝 단계는 다음과 같다:
-
user contexts를 빈 목록으로 둔다.
-
사용자 컨텍스트 집합의 각 user context에 대해:
-
user context info를
userContext필드가 user context의 사용자 컨텍스트 id로 설정된browser.UserContextInfo생성규칙과 일치하는 맵으로 둔다. -
user context info를 user contexts에 추가한다.
-
-
result를
userContexts필드가 user contexts로 설정된browser.GetUserContextsResult생성규칙과 일치하는 맵으로 둔다. -
데이터 result와 함께 성공을 반환한다.
7.2.4.5. browser.removeUserContext 명령
browser.removeUserContext 명령은
beforeunload 핸들러를 실행하지 않고
사용자 컨텍스트와 그 안의 모든 navigable을 닫는다.
- 명령 타입
-
browser.RemoveUserContext= (method:"browser.removeUserContext",params: browser.RemoveUserContextParameters )browser.RemoveUserContextParameters= {userContext: browser.UserContext } - 반환 타입
-
browser.RemoveUserContextResult= EmptyResult
command parameters로 원격 끝 단계는 다음과 같다:
-
user context id를 command parameters["
userContext"]로 둔다. -
user context id가
"default"이면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
user context를 user context id로 사용자 컨텍스트 가져오기를 수행한 결과로 설정한다.
-
user context가 null이면, 오류를 반환하되 오류 코드는 no such user context로 한다.
-
각 최상위 traversable navigable에 대해:
-
navigable의 연관된 사용자 컨텍스트가 user context이면:
-
-
user context를 사용자 컨텍스트 집합에서 제거한다.
-
데이터 null과 함께 성공을 반환한다.
7.2.4.6. browser.setClientWindowState 명령
browser.setClientWindowState 명령은 클라이언트 창의 치수를 설정한다.
- 명령 타입
-
browser.SetClientWindowState= (method:"browser.setClientWindowState",params: browser.SetClientWindowStateParameters )browser.SetClientWindowStateParameters= {clientWindow: browser.ClientWindow, (browser.ClientWindowNamedState // browser.ClientWindowRectState) }browser.ClientWindowNamedState= (state:"fullscreen"/"maximized"/"minimized")browser.ClientWindowRectState= (state:"normal", ?width: js-uint, ?height: js-uint, ?x: js-int, ?y: js-int, ) - 반환 타입
-
browser.SetClientWindowStateResult= browser.ClientWindowInfo
session 및 command parameters로 원격 끝 단계는 다음과 같다:
-
구현이 클라이언트 창 상태 설정을 전혀 지원하지 않으면, 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
-
command parameters["
clientWindow"]를 클라이언트 창 id로 가지는 클라이언트 창이 있으면, client window를 그 클라이언트 창으로 둔다. 그렇지 않으면 오류를 반환하되 오류 코드는 no such client window로 한다. -
client window 및 command parameters["
state"]로 시도하여 클라이언트 창 상태 설정을 수행한다. -
command parameters["
state"]가 "normal"이면:-
command parameters가 "
x"를 포함하고 구현이 클라이언트 창 위치 지정을 지원하면, client window의 x 좌표를 command parameters["x"]에 가능한 한 가까운 값으로 설정한다. -
command parameters가 "
y"를 포함하고 구현이 클라이언트 창 위치 지정을 지원하면, client window의 y 좌표를 command parameters["y"]에 가능한 한 가까운 값으로 설정한다. -
command parameters가 "
width"를 포함하고 구현이 클라이언트 창 크기 조정을 지원하면, client window의 너비를 command parameters["width"]에 가능한 한 가까운 값으로 설정한다. -
command parameters가 "
width"를 포함하고 구현이 클라이언트 창 크기 조정을 지원하면, client window의 너비를 command parameters["width"]에 가능한 한 가까운 값으로 설정한다.
-
-
client window info를 client window로 클라이언트 창 정보 가져오기를 수행한 결과로 둔다.
-
데이터 client window info와 함께 성공을 반환한다.
참고: 단순화를 위해 이는 모든 클라이언트 창 조작을 동기적으로 모델링한다. 따라서 반환된 클라이언트 창 치수는 창이 새 상태에 도달한 뒤의 값일 것으로 예상된다.
7.2.4.7. browser.setDownloadBehavior 명령
다운로드 동작 구조체는 다음을 가진 구조체이다:
원격 끝은 다운로드 동작을 가지며, 이는 구조체로서 다운로드 동작 구조체 또는 null인 기본 다운로드 동작이라는 이름의 항목과, 사용자 컨텍스트와 다운로드 동작 구조체 사이의 약한 맵인 사용자 컨텍스트 다운로드 동작이라는 이름의 항목을 가진다.
- 명령 타입
-
browser.SetDownloadBehavior= (method:"browser.setDownloadBehavior",params: browser.SetDownloadBehaviorParameters )browser.SetDownloadBehaviorParameters= {downloadBehavior: browser.DownloadBehavior / null, ?userContexts: [+browser.UserContext] }browser.DownloadBehavior= { ( browser.DownloadBehaviorAllowed // browser.DownloadBehaviorDenied ) }browser.DownloadBehaviorAllowed= (type:"allowed",destinationFolder: text )browser.DownloadBehaviorDenied= (type:"denied") - 반환 타입
-
browser.SetDownloadBehaviorResult= EmptyResult
-
user context를 navigable의 연관된 사용자 컨텍스트로 둔다.
-
다운로드 동작의 사용자 컨텍스트 다운로드 동작이 user context를 포함하면, 다운로드 동작의 사용자 컨텍스트 다운로드 동작[user context]을 반환한다.
-
다운로드 동작의 기본 다운로드 동작을 반환한다.
session 및 command parameters로 원격 끝 단계는 다음과 같다:
-
command parameters["
downloadBehavior"]가 null이면, download behavior를 null로 둔다. -
그렇지 않으면:
-
command parameters["
downloadBehavior"]["type"]이 "allowed"이면 allowed를 true로 두고, 그렇지 않으면 allowed를 false로 둔다. -
command parameters["
downloadBehavior"]가 "destinationFolder"를 포함하면, destinationFolder를 command parameters["downloadBehavior"]["destinationFolder"]로 두고, 그렇지 않으면 destinationFolder를 null로 둔다. -
download behavior를 allowed가 allowed로 설정되고 destinationFolder가 destinationFolder로 설정된 다운로드 동작 구조체로 둔다.
-
-
구현이 요구된 download behavior를 지원하지 않으면, 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
-
command parameters의
userContexts필드가 있으면:-
user contexts를 command parameters["
userContexts"]로 유효한 사용자 컨텍스트 가져오기를 시도한 결과로 둔다. -
user contexts의 각 user context에 대해:
-
download behavior가 null이면, 다운로드 동작의 사용자 컨텍스트 다운로드 동작에서 user context를 제거한다.
-
그렇지 않으면, 다운로드 동작의 사용자 컨텍스트 다운로드 동작[user context]을 download behavior로 설정한다.
-
-
-
그렇지 않으면, 다운로드 동작의 기본 다운로드 동작을 download behavior로 설정한다.
-
데이터 null과 함께 성공을 반환한다.
7.3. browsingContext 모듈
browsingContext 모듈은 navigable과 관련된 명령 및 이벤트를 포함한다.
참고: 역사적인 이유로 이 모듈은
navigable이 아니라 browsingContext라고 불리며,
프로토콜은 navigable을 지칭하기 위해 context라는 용어를 사용한다.
특히 명령 및 응답 매개변수의 필드에서 그렇게 사용된다.
탐색 진행 상황은 불변 구조체 WebDriver BiDi 탐색 상태를 사용하여 전달되며, 이는 다음 항목을 가진다:
- id
- 탐색에 대한 탐색 id, 또는 탐색이 진행되기 전에 취소된 경우 null.
- status
- "
canceled", "pending", 또는 "complete" 중 하나인 상태 코드. - url
- 탐색에서 로드 중인 URL
- suggestedFilename
- 탐색이 다운로드이면 제안된 파일 이름, 그렇지 않으면 null.
- downloadedFilepath
- 탐색이 완료된 다운로드이고 다운로드된 파일을 사용할 수 있으면 다운로드된 파일의 절대 파일 경로, 그렇지 않으면 null.
7.3.1. 정의
BrowsingContextCommand = (
browsingContext.Activate //
browsingContext.CaptureScreenshot //
browsingContext.Close //
browsingContext.Create //
browsingContext.GetTree //
browsingContext.HandleUserPrompt //
browsingContext.LocateNodes //
browsingContext.Navigate //
browsingContext.Print //
browsingContext.Reload //
browsingContext.SetBypassCSP //
browsingContext.SetViewport //
browsingContext.TraverseHistory
)
BrowsingContextResult= ( browsingContext.ActivateResult / browsingContext.CaptureScreenshotResult / browsingContext.CloseResult / browsingContext.CreateResult / browsingContext.GetTreeResult / browsingContext.HandleUserPromptResult / browsingContext.LocateNodesResult / browsingContext.NavigateResult / browsingContext.PrintResult / browsingContext.ReloadResult / browsingContext.SetBypassCSPResult / browsingContext.SetViewportResult / browsingContext.TraverseHistoryResult )BrowsingContextEvent= ( browsingContext.ContextCreated // browsingContext.ContextDestroyed // browsingContext.DomContentLoaded // browsingContext.DownloadEnd // browsingContext.DownloadWillBegin // browsingContext.FragmentNavigated // browsingContext.HistoryUpdated // browsingContext.Load // browsingContext.NavigationAborted // browsingContext.NavigationCommitted // browsingContext.NavigationFailed // browsingContext.NavigationStarted // browsingContext.UserPromptClosed // browsingContext.UserPromptOpened )
원격 끝은 device pixel ratio 재정의를 가지며, 이는 navigable과 device pixel ratio 재정의 사이의 약한 맵이다. 이는 처음에 비어 있다.
참고: 이 맵은 마지막 세션이 종료될 때 비워지지 않는다. 즉 device pixel ratio 재정의는 어떤 WebDriver 세션보다 오래 지속된다.
뷰포트 치수는 다음을 가진 구조체이다:
뷰포트 구성은 다음을 가진 구조체이다:
처리되지 않은 프롬프트 동작 구조체는 다음을 가진 구조체이다:
-
문자열 또는 null인
alert라는 이름의 항목; -
문자열 또는 null인
beforeUnload라는 이름의 항목; -
문자열 또는 null인
confirm이라는 이름의 항목; -
문자열 또는 null인
default라는 이름의 항목; -
문자열 또는 null인
file이라는 이름의 항목; -
문자열 또는 null인
prompt라는 이름의 항목.
원격 끝은 뷰포트 재정의 맵을 가지며, 이는 사용자 컨텍스트와 뷰포트 구성 사이의 약한 맵이다.
원격 끝은 로케일 재정의 맵을 가지며, 이는 navigable 또는 사용자 컨텍스트와 문자열 사이의 약한 맵이다.
화면 설정은
정수인 height라는 이름의
항목,
정수인 width라는 이름의
항목,
정수인 x라는 이름의 항목,
정수인 y라는 이름의 항목을 가진
구조체이다.
원격 끝은 화면 설정 재정의를 가지며, 이는 구조체로서 사용자 컨텍스트와 화면 설정 사이의 약한 맵인 사용자 컨텍스트 화면 설정이라는 이름의 항목과, navigable과 화면 설정 사이의 약한 맵인 navigable 화면 설정이라는 이름의 항목을 가진다.
원격 끝은 시간대 재정의 맵을 가지며, 이는 navigable 또는 사용자 컨텍스트와 문자열 사이의 약한 맵이다.
원격 끝은 처리되지 않은 프롬프트 동작 재정의 맵을 가지며, 이는 사용자 컨텍스트와 처리되지 않은 프롬프트 동작 구조체 사이의 약한 맵이다.
원격 끝은 스크립팅 활성화 재정의 맵을 가지며, 이는 navigable 또는 사용자 컨텍스트와 boolean 사이의 약한 맵이다.
7.3.2. 타입
7.3.2.1. browsingContext.BrowsingContext 타입
browsingContext.BrowsingContext = text;
각 navigable은 연관된 navigable id를 가지며, 이는 해당 navigable을 고유하게 식별하는 문자열이다. 이는 navigable이 생성될 때 암묵적으로 설정된다. 연관된 WebDriver 창 핸들을 가진 navigable의 경우, navigable id는 창 핸들과 같아야 한다.
각 navigable은 또한 연관된 저장소 파티션을 가지며, 이는 데이터를 지속시키기 위해 사용하는 저장소 파티션이다.
각 navigable은 또한 연관된 원래 opener를 가지며, 이는 해당 navigable이 열리도록 한 navigable 또는 null이고, 처음에는 null로 설정된다.
-
navigable id가 null이면, 데이터 null과 함께 성공을 반환한다.
-
navigable id가 navigable id인 navigable이 없으면 오류를 반환하되 오류 코드는 no such frame으로 한다.
-
navigable을 id가 navigable id인 navigable로 둔다.
-
데이터 navigable과 함께 성공을 반환한다.
7.3.2.2. browsingContext.Info 타입
browsingContext.InfoList= [*browsingContext.Info]browsingContext.Info= {children: browsingContext.InfoList / null,clientWindow: browser.ClientWindow,context: browsingContext.BrowsingContext,originalOpener: browsingContext.BrowsingContext / null,url: text,userContext: browser.UserContext, ?parent: browsingContext.BrowsingContext / null, }
browsingContext.Info 타입은 navigable의 속성을 나타낸다.
TODO: 이를 문서 순서의 목록을 반환하도록 만든다
-
child navigables를 navigable의 자식 navigable인 모든 navigable을 포함하는 집합으로 둔다.
-
child navigables를 반환한다.
-
navigable id를 navigable에 대한 navigable id로 둔다.
-
parent navigable을 navigable의 부모로 둔다.
-
parent navigable이 null이 아니면 parent id를 parent navigable의 navigable id로 둔다. 그렇지 않으면 parent id를 null로 둔다.
-
document를 navigable의 활성 문서로 둔다.
-
url을 document의 URL이 주어졌을 때 URL 직렬화기를 실행한 결과로 둔다.
참고: 이는 URL의 fragment 컴포넌트를 포함한다.
-
child infos를 null로 둔다.
-
max depth가 null이거나 max depth가 0보다 크면:
-
child navigables를 navigable이 주어졌을 때 자식 navigable 가져오기를 수행한 결과로 둔다.
-
max depth가 null이 아니면 child depth를 max depth - 1로, 그렇지 않으면 null로 둔다.
-
child infos를 빈 목록으로 설정한다.
-
child navigables의 각 child navigable에 대해:
-
info를 child navigable, child depth, false가 주어졌을 때 navigable 정보 가져오기를 수행한 결과로 둔다.
-
info를 child infos에 추가한다
-
-
-
user context를 navigable의 연관된 사용자 컨텍스트로 둔다.
-
navigable의 원래 opener가 null이 아니면 opener id를 navigable의 원래 opener에 대한 navigable id로 두고, 그렇지 않으면 null로 둔다.
-
top-level traversable을 navigable의 최상위 traversable로 둔다.
-
client window id를 top-level traversable의 연관된 클라이언트 창에 대한 클라이언트 창 id로 둔다.
-
navigable info를
context필드는 navigable id로, include parent id가true이면parent필드는 parent id로 설정하고 그렇지 않으면 설정하지 않으며,url필드는 url로,userContext필드는 user context의 사용자 컨텍스트 id로,originalOpener필드는 opener id로,children필드는 child infos로, 그리고clientWindow필드는 client window id로 설정한browsingContext.Info생성규칙과 일치하는 맵으로 둔다. -
navigable info를 반환한다.
default") 및 ignore cache(기본값: false)가
주어졌을 때 탐색 대기를
하려면:
-
navigation id를 진정한 난수 또는 의사 난수에 기반한 UUID의 문자열 표현으로 둔다.
-
navigable을 리소스 request로 탐색하되, navigable의 활성 문서를 소스
Document로 사용하고, 탐색 id navigation id 및 히스토리 처리 동작 history handling을 사용한다. ignore cache가 true이면, 탐색은 HTTP 캐시에서 리소스를 로드해서는 안 된다.ignore cache 플래그가 어떻게 동작하는지 정확히 지정한다. 이는 리소스의 첫 번째 로드만 캐시를 우회하는지(즉, 처음에 캐시를 비우고 일반적으로 진행하는 것과 같은지), 또는 HTML 파서가 직접 로드하지 않은 리소스(예: 스크립트나 스타일시트에 의해 시작된 로드)도 캐시를 우회하는지 고려해야 한다.
-
(event received, navigation status)를 «"
navigation started", "navigation failed", "fragment navigated"» 및 navigation id가 주어졌을 때 대기한 결과로 둔다. -
단언: navigation status의 id는 navigation id이다.
-
navigation status의 status가 "
complete"이면:-
body를
navigation필드는 navigation id로 설정하고,url필드는 navigation status의 url이 주어졌을 때 URL 직렬화기를 수행한 결과로 설정한browsingContext.NavigateResult생성규칙과 일치하는 맵으로 둔다. -
데이터 body와 함께 성공을 반환한다.
참고: 이는 탐색이 fragment 변경만 일으킨 경우이다.
-
-
navigation status의 status가 "
canceled"이면 오류를 반환하되 오류 코드는 unknown error로 한다.TODO: 여기서 오류를 처리하는 올바른 방식인가?
-
단언: navigation status의 status는 "
pending"이고 navigation id는 null이 아니다. -
wait condition이 "
committed"이면, event name을 "committed"로 둔다. -
그렇지 않고, wait condition이 "
interactive"이면, event name을 "domContentLoaded"로 둔다. -
그렇지 않으면, event name을 "
load"로 둔다. -
(event received, status)를 «event name, "
download started", "navigation aborted", "navigation failed"» 및 navigation id가 주어졌을 때 대기한 결과로 둔다. -
event received가 "
navigation failed"이면 오류를 반환하되 오류 코드는 unknown error로 한다.무엇이 왜 실패했는지에 대한 충분한 정보를 여기서 오류로 드러내고 있는가? 어떤 오류 코드를 원하는가? 로컬 끝이 실제로 무엇이 잘못되었는지 알아내기 위해 구현 정의 문자열을 파싱하는 문제가 생길 수 있는가?
-
body를
navigation필드는 status의 id로 설정하고,url필드는 status의 url이 주어졌을 때 URL 직렬화기를 수행한 결과로 설정한browsingContext.NavigateResult생성규칙과 일치하는 맵으로 둔다. -
데이터 body와 함께 성공을 반환한다.
7.3.2.3. browsingContext.Locator 타입
browsingContext.Locator= ( browsingContext.AccessibilityLocator / browsingContext.CssLocator / browsingContext.ContextLocator / browsingContext.InnerTextLocator / browsingContext.XPathLocator )browsingContext.AccessibilityLocator= {type:"accessibility",value: { ?name: text, ?role: text, } }browsingContext.CssLocator= {type:"css",value: text }browsingContext.ContextLocator= {type:"context",value: {context: browsingContext.BrowsingContext, } }browsingContext.InnerTextLocator= {type:"innerText",value: text, ?ignoreCase: bool ?matchType:"full"/"partial", ?maxDepth: js-uint, }browsingContext.XPathLocator= {type:"xpath",value: text }
browsingContext.Locator 타입은 문서에서 노드를 찾기 위한
전략에 대한 세부사항을 제공한다.
7.3.2.4. browsingContext.Navigation 타입
browsingContext.Navigation = text;
browsingContext.Navigation 타입은 진행 중인 탐색을 식별하는 고유한 문자열이다.
TODO: HTML 명세의 정의에 링크한다.
7.3.2.5. browsingContext.NavigationInfo 타입
browsingContext.BaseNavigationInfo= (context: browsingContext.BrowsingContext,navigation: browsingContext.Navigation / null,timestamp: js-uint,url: text, ?userContext: browser.UserContext, )browsingContext.NavigationInfo= { browsingContext.BaseNavigationInfo }
browsingContext.NavigationInfo 타입은 진행 중인 탐색의 세부사항을 제공한다.
-
navigable id를 navigable에 대한 navigable id로 둔다.
-
navigation id를 navigation status의 id로 둔다.
-
timestamp를 현재 날짜와 시간을 UTC로 나타내는 시간 값으로 둔다.
-
url을 navigation status의 url로 둔다.
-
user context id를 navigable의 연관된 사용자 컨텍스트의 사용자 컨텍스트 id로 둔다.
-
context필드는 navigable id로,navigation필드는 navigation id로,timestamp필드는 timestamp로,url필드는 url이 주어졌을 때 URL 직렬화기를 수행한 결과로, 그리고userContext필드는 user context id로 설정한browsingContext.NavigationInfo생성규칙과 일치하는 맵을 반환한다.
7.3.2.6. browsingContext.ReadinessState 타입
browsingContext.ReadinessState="none"/"interactive"/"complete"
browsingContext.ReadinessState 타입은 탐색 명령이 반환될 문서 로딩의
단계를 나타낸다.
7.3.2.7. browsingContext.UserPromptType 타입
browsingContext.UserPromptType="alert"/"beforeunload"/"confirm"/"prompt";
browsingContext.UserPromptType 타입은 가능한 사용자 프롬프트 타입을 나타낸다.
7.3.3. 명령
7.3.3.1. browsingContext.activate 명령
browsingContext.activate 명령은 주어진 최상위 traversable을 활성화하고 포커스한다.
- 명령 타입
-
browsingContext.Activate= (method:"browsingContext.activate",params: browsingContext.ActivateParameters )browsingContext.ActivateParameters= {context: browsingContext.BrowsingContext } - 반환 타입
-
browsingContext.ActivateResult= EmptyResult
command parameters로 원격 끝 단계는 다음과 같다:
-
navigable id를 command parameters["
context"] 필드의 값으로 둔다. -
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
navigable이 최상위 traversable이 아니면, 오류를 반환하되 오류 코드는 invalid argument로 한다.
-
navigable로 navigable 활성화를 수행한 결과를 반환한다.
-
navigable의 시스템 가시성 상태가 visible이 되도록 구현별 단계를 실행한다. 이것이 가능하지 않으면, 오류 코드 unsupported operation인 오류를 반환한다.
참고: 이는 현재 visible인 navigable을 hidden으로 만드는 부작용을 가질 수 있다.
참고: 이는 창의 최소화 상태를 해제하거나 시스템 가시성 상태 변경과 관련된 다른 부작용을 일으켜 기본 OS 상태를 변경할 수 있다.
-
포커스되어 있지 않으면 navigable에 시스템 포커스를 설정하기 위해 구현별 단계를 실행한다.
참고: 이는 다른 명세가 요구하는 경우를 제외하고 문서의 포커스된 영역을 변경하지 않는다.
-
데이터 null과 함께 성공을 반환한다.
7.3.3.2. browsingContext.captureScreenshot 명령
browsingContext.captureScreenshot 명령은 주어진 navigable의 이미지를 캡처하고, 이를 Base64로 인코딩된 문자열로 반환한다.
- 명령 타입
-
browsingContext.CaptureScreenshot= (method:"browsingContext.captureScreenshot",params: browsingContext.CaptureScreenshotParameters )browsingContext.CaptureScreenshotParameters= {context: browsingContext.BrowsingContext, ?origin: ("viewport"/"document") .default "viewport", ?format: browsingContext.ImageFormat, ?clip: browsingContext.ClipRectangle, }browsingContext.ImageFormat= {type: text, ?quality: 0.0..1.0, }browsingContext.ClipRectangle= ( browsingContext.BoxClipRectangle / browsingContext.ElementClipRectangle )browsingContext.ElementClipRectangle= {type:"element",element: script.SharedReference }browsingContext.BoxClipRectangle= {type:"box",x: float,y: float,width: float,height: float } - 반환 타입
-
browsingContext.CaptureScreenshotResult= {data: text }
-
rect1를 rect1로 rect 정규화를 수행한 결과로 둔다.
-
rect2를 rect2로 rect 정규화를 수행한 결과로 둔다.
-
x1_0를 rect1의 x 좌표로 둔다.
-
x2_0를 rect2의 x 좌표로 둔다.
-
x_0를 «x1_0, x2_0»의 최댓값으로 둔다.
-
x_1를 «x1_1, x2_1»의 최솟값으로 둔다.
-
y1_0를 rect1의 y 좌표로 둔다.
-
y2_0를 rect2의 y 좌표로 둔다.
-
y_0를 «y1_0, y2_0»의 최댓값으로 둔다.
-
y_1를 «y1_1, y2_1»의 최솟값으로 둔다.
-
x_1이 x_0보다 작으면, width를 0으로 둔다. 그렇지 않으면 width를 x_1 - x_0으로 둔다.
-
y_1이 y_0보다 작으면, height를 0으로 둔다. 그렇지 않으면 height를 y_1 - y_0으로 둔다.
-
x 좌표가 x_0, y 좌표가 y_0, 너비 치수가 width, 높이 치수가 height인 새
DOMRectReadOnly를 반환한다.
-
ratio를 document의 default view가 주어졌을 때 device pixel ratio 결정을 수행한 결과로 둔다.
-
paint width를 rect의 너비 치수에 ratio를 곱하고 가장 가까운 정수로 반올림한 값으로 둔다. 이는 장치 픽셀에서 rect의 너비와 일치하도록 하기 위함이다.
-
paint height를 rect의 높이 치수에 ratio를 곱하고 가장 가까운 정수로 반올림한 값으로 둔다. 이는 장치 픽셀에서 rect의 높이와 일치하도록 하기 위함이다.
-
canvas를
HTMLCanvasElement인 새 객체로 두고,width를 paint width,height를 paint height로 한다. -
canvas context를 canvas 및 null로 2D context 생성 알고리즘을 실행한 결과로 둔다.
-
canvas의 context mode를 2D로 설정한다.
-
rect가 덮는 document의 영역을 나타내는 framebuffer의 영역을 canvas context에 그리는 것과 동등한 구현별 단계를 완료한다. 이때 framebuffer의 각 픽셀은 canvas context의 픽셀에 대응하며, 뷰포트 좌표에서 (rect의 x 좌표, rect의 y 좌표)는 canvas context의 (0,0)에 대응하고, (rect의 x 좌표 + rect의 너비 치수, rect의 y 좌표 + rect의 높이 치수)는 (paint width, paint height)에 대응한다.
-
canvas를 반환한다.
-
format이 null이 아니면, type을 format의
type필드로 두고, quality를 format의quality필드로 둔다. -
그렇지 않으면, type을 "image/png"로 두고 quality를 undefined로 둔다.
-
file을 canvas에 대해 type 및 quality로 비트맵을 파일로 직렬화한 것으로 둔다.
-
encoded string을 file의 forgiving-base64 인코딩으로 둔다.
-
데이터 encoded string과 함께 성공을 반환한다.
-
origin이
"viewport"이면:-
viewport를 document의 visual viewport로 둔다.
-
x 좌표가 viewport page left, y 좌표가 viewport page top, 너비 치수가 viewport width, 그리고 높이 치수가 viewport height인
DOMRectReadOnly를 viewport rect로 둔다. -
데이터 viewport rect와 함께 성공을 반환한다.
-
-
단언: origin은
"document"이다. -
document element를 document에 대한 document 요소로 둔다.
-
x 좌표가 0, y 좌표가 0, 너비 치수가 document element scroll height, 그리고 높이 치수가 document element scroll width인
DOMRectReadOnly를 document rect로 둔다. -
데이터 document rect와 함께 성공을 반환한다.
session 및 command parameters로 원격 끝 단계는 다음과 같다:
-
navigable id를 command parameters의
context필드가 있으면 그 값으로, 그렇지 않으면 null로 둔다. -
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
구현이 어떤 이유로든 navigable의 스크린샷을 캡처할 수 없으면 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
-
document를 navigable의 활성 문서로 둔다.
-
document에 대해 다음번 애니메이션 프레임 콜백 실행 알고리즘 호출 직후:
-
origin을 command parameters의
context필드가 있으면 그 값으로, 그렇지 않으면 "viewport"로 둔다. -
origin rect를 origin 및 document가 주어졌을 때 원점 직사각형 가져오기를 시도한 결과로 둔다.
-
clip rect를 origin rect로 둔다.
-
command parameters가 "
clip"을 포함하면:-
clip을 command parameters["
clip"]로 둔다. -
처음 일치하는 조건 아래의 단계를 실행한다:
- clip이
browsingContext.ElementClipRectangle생성규칙과 일치함: -
-
environment settings를 관련 전역 객체의 연관된
Document가 document인 환경 설정 객체로 둔다. -
realm을 environment settings의 렐름 실행 컨텍스트의 Realm 컴포넌트로 둔다.
-
element를 clip["
element"], realm 및 session으로 원격 참조 역직렬화를 시도한 결과로 둔다. -
element가
Element를 구현하지 않으면 오류를 반환하되 오류 코드는 no such element로 한다. -
element의 노드 문서가 document가 아니면, 오류를 반환하되 오류 코드는 no such element로 한다.
-
viewport rect를 "
viewport" 및 document가 주어졌을 때 원점 직사각형 가져오기를 수행한 결과로 둔다. -
element rect를 element에 대해 경계 상자 가져오기를 수행한 결과로 둔다.
-
x 좌표가 element rect["
x"] + viewport rect["x"], y 좌표가 element rect["y"] + viewport rect["y"], width가 element rect["width"], 그리고 height가 element rect["height"]인DOMRectReadOnly를 clip rect로 둔다.
-
- clip이
browsingContext.BoxClipRectangle생성규칙과 일치함: -
-
clip x를 clip["
x"]에 origin rect의 x 좌표를 더한 값으로 둔다. -
clip y를 clip["
y"]에 origin rect의 y 좌표를 더한 값으로 둔다. -
x 좌표가 clip x, y 좌표가 clip y, width가 clip["
width"], 그리고 height가 clip["height"]인DOMRectReadOnly를 clip rect로 둔다.
-
- clip이
-
-
참고: 이제 모든 좌표는 문서의 원점으로부터 측정된다.
-
rect를 origin rect와 clip rect의 직사각형 교차로 둔다.
-
rect의 너비 치수가 0이거나 rect의 높이 치수가 0이면, 오류 코드 unable to capture screen인 오류를 반환한다.
-
canvas를 document 및 rect로 문서를 canvas로 렌더링을 수행한 결과로 둔다.
-
format을 command parameters의
format필드로 둔다. -
encoding result를 canvas 및 format로 canvas를 Base64로 인코딩을 시도한 결과로 둔다.
-
body를
data필드가 encoding result로 설정된browsingContext.CaptureScreenshotResult생성규칙과 일치하는 맵으로 둔다. -
데이터 body와 함께 성공을 반환한다.
7.3.3.3. browsingContext.close 명령
browsingContext.close 명령은 최상위 traversable을 닫는다.
- 명령 타입
-
browsingContext.Close= (method:"browsingContext.close",params: browsingContext.CloseParameters )browsingContext.CloseParameters= {context: browsingContext.BrowsingContext, ?promptUnload: bool .default false } - 반환 타입
-
browsingContext.CloseResult= EmptyResult
-
navigable id를 command parameters의
context필드 값으로 둔다. -
prompt unload를 command parameters의
promptUnload필드 값으로 둔다. -
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
단언: navigable은 null이 아니다.
-
navigable이 최상위 traversable이 아니면, 오류를 반환하되 오류 코드는 invalid argument로 한다.
-
prompt unload가 true이면:
-
navigable을 닫는다.
-
-
그렇지 않으면:
-
데이터 null과 함께 성공을 반환한다.
마지막 최상위 traversable을 닫을 때의 동작에 대한 공개 논의가 있다. 브라우저를 닫거나, 세션을 닫거나, 이를 구현에 맡기는 것을 예상할 수 있다. [w3c/webdriver-bidi Issue #170]
7.3.3.4. browsingContext.create 명령
browsingContext.create 명령은 새 탭 또는 새 창에 새 navigable을 만들고, 그 navigable id를 반환한다.
- 명령 타입
-
browsingContext.Create= (method:"browsingContext.create",params: browsingContext.CreateParameters )browsingContext.CreateType="tab"/"window"browsingContext.CreateParameters= {type: browsingContext.CreateType, ?referenceContext: browsingContext.BrowsingContext, ?background: bool .default false, ?userContext: browser.UserContext } - 반환 타입
-
browsingContext.CreateResult= {context: browsingContext.BrowsingContext, ?userContext: browser.UserContext }
-
type을 command parameters의
type필드 값으로 둔다. -
reference navigable id를 command parameters의
referenceContext필드 값으로 두되, 있으면 그 값으로, 그렇지 않으면 null로 둔다. -
reference navigable id가 null이 아니면, reference navigable을 reference navigable id로 navigable 가져오기를 시도한 결과로 둔다. 그렇지 않으면 reference navigable을 null로 둔다.
-
reference navigable이 null이 아니고 최상위 traversable이 아니면, 오류를 반환하되 오류 코드는 invalid argument로 한다.
-
구현이 어떤 이유로든 새 최상위 traversable을 만들 수 없으면 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
-
user context를, reference navigable이 null이면 기본 사용자 컨텍스트로 두고, 그렇지 않으면 reference navigable의 연관된 사용자 컨텍스트로 둔다.
-
user context id를 command parameters의
userContext필드 값으로 두되, 있으면 그 값으로, 그렇지 않으면 null로 둔다. -
user context id가 null이 아니면, user context를 user context id로 사용자 컨텍스트 가져오기를 시도한 결과로 설정한다.
-
user context가 null이면, 오류를 반환하되 오류 코드는 no such user context로 한다.
-
구현이 어떤 이유로든 연관된 사용자 컨텍스트 user context를 가진 새 최상위 traversable을 만들 수 없으면, 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
-
traversable을 null과 빈 문자열로 새 최상위 traversable 생성 단계를 시도하고, 새로 생성된 최상위 traversable의 연관된 사용자 컨텍스트를 user context로 설정한 결과로 둔다. 새 최상위 traversable이 어느 OS 창에 생성되는지는 type 및 reference navigable에 따라 달라진다:
-
type이 "
tab"이고 구현이 같은 OS 창 안에서 여러 최상위 traversable을 지원하면:-
새 최상위 traversable은 기존 OS 창이 있으면 이를 재사용해야 한다.
-
reference navigable이 null이 아니면, 새 최상위 traversable은 reference navigable을 포함하는 창이 있으면 이를 재사용해야 한다. OS 창 안의 최상위 traversable에 명확한 순서가 있으면, 새 최상위 traversable은 그 순서에서 reference navigable의 최상위 traversable 바로 뒤에 있어야 한다.
-
-
type이 "
window"이고, 구현이 별도의 OS 창에서 여러 최상위 traversable을 지원하면, 생성된 최상위 traversable은 새 OS 창에 있어야 한다. -
그렇지 않으면, 최상위 traversable이 사용자에게 어떻게 표시되는지의 세부사항은 구현 정의이다.
-
-
command parameters의
background필드 값이 false이면:-
activate result를 새로 생성된 navigable로 navigable 활성화를 수행한 결과로 둔다.
-
activate result가 오류이면, activate result를 반환한다.
참고:
background가 true이면 생성된 navigable에 대해 포커싱 단계를 호출하지 않는다. -
-
body를
context필드는 traversable의 navigable id로 설정하고,userContext속성은 traversable의 연관된 사용자 컨텍스트의 사용자 컨텍스트 id로 설정한browsingContext.CreateResult생성규칙과 일치하는 맵으로 둔다. -
데이터 body와 함께 성공을 반환한다.
7.3.3.5. browsingContext.getTree 명령
browsingContext.getTree 명령은 주어진 부모 자체를 포함한 모든 자손 navigable의 트리, 또는 부모가 제공되지 않은 경우 모든 최상위 context를 반환한다.
- 명령 타입
-
browsingContext.GetTree= (method:"browsingContext.getTree",params: browsingContext.GetTreeParameters )browsingContext.GetTreeParameters= { ?maxDepth: js-uint, ?root: browsingContext.BrowsingContext, } - 반환 타입
-
browsingContext.GetTreeResult= {contexts: browsingContext.InfoList }
-
root id를 command parameters의
root필드 값으로 두되, 있으면 그 값으로, 그렇지 않으면 null로 둔다. -
max depth를 command parameters의
maxDepth필드 값으로 두되, 있으면 그 값으로, 그렇지 않으면 null로 둔다. -
navigables를 빈 목록으로 둔다.
-
root id가 null이 아니면, root id가 주어졌을 때 navigable 가져오기를 시도한 결과를 navigables에 추가한다. 그렇지 않으면 모든 최상위 traversable을 navigables에 추가한다.
-
navigables infos를 빈 목록으로 둔다.
-
navigables의 각 navigable에 대해:
-
info를 navigable, max depth, true가 주어졌을 때 navigable 정보 가져오기를 수행한 결과로 둔다.
-
info를 navigables infos에 추가한다
-
-
body를
contexts필드가 navigables infos로 설정된browsingContext.GetTreeResult생성규칙과 일치하는 맵으로 둔다. -
데이터 body와 함께 성공을 반환한다.
7.3.3.6. browsingContext.handleUserPrompt 명령
browsingContext.handleUserPrompt 명령은 열린 프롬프트를 닫을 수 있게 한다
- 명령 타입
-
browsingContext.HandleUserPrompt= (method:"browsingContext.handleUserPrompt",params: browsingContext.HandleUserPromptParameters )browsingContext.HandleUserPromptParameters= {context: browsingContext.BrowsingContext, ?accept: bool, ?userText: text, } - 반환 타입
-
browsingContext.HandleUserPromptResult= EmptyResult
session 및 command parameters로 원격 끝 단계는 다음과 같다:
-
navigable id를 command parameters의
context필드 값으로 둔다. -
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
accept를 command parameters의
accept필드 값으로 두되, 있으면 그 값으로, 그렇지 않으면 true로 둔다. -
userText를 command parameters의
userText필드 값으로 두되, 있으면 그 값으로, 그렇지 않으면 빈 문자열로 둔다. -
navigable이 현재 alert 호출에서 온 단순 대화상자를 표시 중이면 프롬프트를 확인한다.
그렇지 않고 navigable이 현재 confirm 호출에서 온 단순 대화상자를 표시 중이면, accept가 true일 때 긍정적으로 응답하고, accept가 false일 때 부정적으로 응답한다.
그렇지 않고 navigable이 현재 prompt 호출에서 온 단순 대화상자를 표시 중이면, accept가 true일 때 문자열 값 userText로 응답하고, accept가 false일 때 중단한다.
그렇지 않고, navigable이 현재 언로드 프롬프트 단계의 일부로 프롬프트를 표시 중이면, accept가 true일 때 탐색을 확인하고, 그렇지 않으면 탐색을 거부한다.
그렇지 않으면 오류를 반환하되 오류 코드는 no such alert로 한다.
-
데이터 null과 함께 성공을 반환한다.
7.3.3.7. browsingContext.locateNodes 명령
browsingContext.locateNodes 명령은 지정된 locator와 일치하는 모든 노드의 목록을 반환한다.
- 명령 타입
-
browsingContext.LocateNodes= (method:"browsingContext.locateNodes",params: browsingContext.LocateNodesParameters )browsingContext.LocateNodesParameters= {context: browsingContext.BrowsingContext,locator: browsingContext.Locator, ?maxNodeCount: (js-uint .ge 1), ?serializationOptions: script.SerializationOptions, ?startNodes: [ + script.SharedReference ] } - 반환 타입
-
browsingContext.LocateNodesResult= {nodes: [ * script.NodeRemoteValue ] }
-
returned nodes를 빈 목록으로 둔다.
-
parse result를 selector가 주어졌을 때 selector 파싱을 수행한 결과로 둔다.
-
parse result가 실패이면, 오류를 반환하되 오류 코드는 invalid selector로 한다.
-
context nodes의 각 context node에 대해:
-
elements를 parse result 및 navigable의 활성 문서의 루트로 scoping root context node를 사용하여 selector를 트리와 대조한 결과로 둔다.
-
elements의 각 element에 대해:
-
-
데이터 returned nodes와 함께 성공을 반환한다.
주어진 navigable, context nodes, selector, maximum returned node count로 XPath를 사용하여 노드 찾기를 하려면:
참고: XPath 명세가 유지보수되지 않는 상태이므로 이 알고리즘은 XPath DOM API를 호출하는 것처럼 표현되어 있다. 그러나 이는 ECMAScript 런타임을 거치지 않고 기반 알고리즘에 직접 접근하는 명세 내부 호출과 동등한 것으로 이해해야 한다.
-
returned nodes를 빈 목록으로 둔다.
-
context nodes의 각 context node에 대해:
-
evaluate result를 navigable의 활성 문서에서, 인수 selector, context node, null, ORDERED_NODE_SNAPSHOT_TYPE, null로 evaluate를 호출한 결과로 둔다. 이것이 "SyntaxError" DOMException을 던지면, 오류를 반환하되 오류 코드는 invalid selector로 한다; 그렇지 않고, 이것이 다른 예외를 던지면 오류를 반환하되 오류 코드는 unknown error로 한다.
-
index를 0으로 둔다.
-
length를 evaluate result에서
snapshotLength속성을 가져온 결과로 둔다. -
index가 length보다 작은 동안 반복한다:
-
node를 evaluate result를 this로, index를 인수로 하여 snapshotItem을 호출한 결과로 둔다.
-
node를 returned nodes에 추가한다.
-
maximum returned node count가 null이 아니고 returned nodes의 크기가 maximum returned node count와 같으면, 데이터 returned nodes와 함께 성공을 반환한다.
-
index를 index + 1로 설정한다.
-
-
-
데이터 returned nodes와 함께 성공을 반환한다.
-
selector가 빈 문자열이면, 오류를 반환하되 오류 코드는 invalid selector로 한다.
-
returned nodes를 빈 목록으로 둔다.
-
ignore case가 false이면, search text를 selector로 둔다. 그렇지 않으면, search text를 selector에 대해 Unicode Default Case Conversion 알고리즘에 따라 toUppercase를 수행한 결과로 둔다.
-
context nodes의 각 context node에 대해:
-
context node가
Document또는DocumentFragment를 구현하면:참고: 문서 또는 문서 fragment를 순회할 때,
document와document.documentElement로 검색한 결과가 같아지도록max depth는 의도적으로 감소시키지 않는다. -
context node가
HTMLElement를 구현하지 않으면 계속한다. -
node inner text를 context node를 this 값으로 하여 innerText getter 단계를 호출한 결과로 둔다.
-
ignore case가 false이면, node text를 node inner text로 둔다. 그렇지 않으면, node text를 node inner text에 대해 Unicode Default Case Conversion 알고리즘에 따라 toUppercase를 수행한 결과로 둔다.
-
search text가 node text의 코드 포인트 부분 문자열이면, 다음 단계를 수행한다:
-
child nodes를 빈 목록으로 두고, context node의 자식에 있는 각 노드 child에 대해:
-
child를 child nodes에 추가한다.
-
-
child nodes의 크기가 0과 같거나 max depth가 0과 같으면, 다음 단계를 수행한다:
-
그렇지 않으면, 다음 단계를 수행한다:
-
max depth가 null이면 child max depth를 null로, 그렇지 않으면 max depth - 1로 둔다.
-
child node matches를 child nodes, selector, child max depth , match type, ignore case, maximum returned node count로 inner text를 사용하여 노드 찾기를 수행한 결과로 둔다.
-
child node matches의 크기가 0과 같고 match type이
"partial"이면 context node를 returned nodes에 추가한다. 그렇지 않으면, returned nodes를 child node matches로 확장한다.
-
-
-
-
maximum returned node count가 null이 아니면, returned nodes에서 인덱스가 maximum returned node count 이상인 모든 항목을 제거한다.
-
데이터 returned nodes와 함께 성공을 반환한다.
-
returned nodes가 null이면:
-
returned nodes를 빈 목록으로 설정한다.
-
-
context nodes의 각 context node에 대해:
-
match를 true로 둔다.
-
context node가
Element를 구현하면: -
그렇지 않으면, match를 false로 설정한다.
-
match가 true이면:
-
child nodes를 빈 목록으로 두고, context node의 자식에 있는 각 노드 child에 대해:
-
child nodes, selector, maximum returned node count, returned nodes로 접근성 속성을 사용하여 노드 수집을 시도한다.
-
-
returned nodes를 반환한다.
-
selector가 "
role"을 포함하지 않고 selector가 "name"을 포함하지 않으면, 오류를 반환하되 오류 코드는 invalid selector로 한다. -
context nodes, selector, maximum returned node count, null로 접근성 속성을 사용하여 노드 수집을 수행한 결과를 반환한다.
-
navigable id를 command parameters["
context"]로 둔다. -
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
단언: navigable은 null이 아니다.
-
realm을 navigable의 navigable id와 null로 navigable에서 realm 가져오기를 시도한 결과로 둔다.
-
locator를 command parameters["
locator"]로 둔다. -
command parameters가 "
startNodes"를 포함하면, start nodes parameter를 command parameters["startNodes"]로 둔다. 그렇지 않으면 start nodes parameter를 null로 둔다. -
command parameters가 "
maxNodeCount"를 포함하면, maximum returned node count를 command parameters["maxNodeCount"]로 둔다. 그렇지 않으면 maximum returned node count를 null로 둔다. -
context nodes를 빈 목록으로 둔다.
-
start nodes parameter가 null이면, navigable의 활성 문서를 context nodes에 추가한다. 그렇지 않으면, start nodes parameter의 각 serialized start node에 대해:
-
start node를 serialized start node, realm, session가 주어졌을 때 공유 참조 역직렬화를 시도한 결과로 둔다.
-
start node를 context nodes에 추가한다.
-
-
context nodes의 크기가 0보다 크다고 단언한다.
-
type을 locator["
type"]로 둔다. -
다음 조건 및 관련 단계 목록에서, 관련 조건이 true인 첫 번째 단계 집합을 실행한다:
- type이 문자열 "
css"인 경우 -
-
selector를 locator["
value"]로 둔다. -
result nodes를 navigable, context nodes, selector, maximum returned nodes가 주어졌을 때 css를 사용하여 노드 찾기를 시도한 결과로 둔다.
-
- type이 문자열 "
xpath"인 경우 -
-
selector를 locator["
value"]로 둔다. -
result nodes를 navigable, context nodes, selector, maximum returned nodes가 주어졌을 때 xpath를 사용하여 노드 찾기를 시도한 결과로 둔다.
-
- type이 문자열 "
innerText"인 경우 -
-
selector를 locator["
value"]로 둔다. -
locator가
maxDepth를 포함하면, max depth를 locator["maxDepth"]로 둔다. 그렇지 않으면 max depth를 null로 둔다. -
locator가
ignoreCase를 포함하면, ignore case를 locator["ignoreCase"]로 둔다. 그렇지 않으면 ignore case를 false로 둔다. -
locator가
matchType을 포함하면, match type를 locator["matchType"]로 둔다. 그렇지 않으면 match type를 "full"로 둔다. -
result nodes를 context nodes, selector, max depth, match type, ignore case, maximum returned node count가 주어졌을 때 inner text를 사용하여 노드 찾기를 시도한 결과로 둔다.
-
- type이 문자열 "
accessibility"인 경우 -
-
selector를 locator["
value"]로 둔다. -
result nodes를 context nodes, selector, maximum returned node count가 주어졌을 때 접근성 속성을 사용하여 노드 찾기를 수행한 결과로 둔다.
-
- type이 문자열 "
context"인 경우 -
-
start nodes parameter가 null이 아니면, 오류를 반환하되 오류 코드는 "
invalid argument"로 한다. -
selector를 locator["
value"]로 둔다. -
context id를 selector["
context"]로 둔다. -
child navigable을 context id로 navigable 가져오기를 시도한 결과로 둔다.
-
child navigable의 부모가 navigable이 아니면, 오류를 반환하되 오류 코드는 "
invalid argument"로 한다. -
result nodes를 child navigable이 주어졌을 때 컨테이너 요소 찾기를 수행한 결과로 둔다.
-
단언: result nodes의 각 node에 대해, node의 노드 navigable은 navigable이다.
-
- type이 문자열 "
-
단언: maximum returned node count는 null이거나 result nodes의 크기가 maximum returned node count 이하이다.
-
command parameters가 "
serializationOptions"를 포함하면, serialization options를 command parameters["serializationOptions"]로 둔다. 그렇지 않으면, serialization options를 필드가 기본값으로 설정된script.SerializationOptions생성규칙과 일치하는 맵으로 둔다. -
result ownership을 "none"으로 둔다.
-
serialized nodes를 빈 목록으로 둔다.
-
result nodes의 각 result node에 대해:
-
serialized node를 result node, serialization options, result ownership, 직렬화 내부 맵으로서 새 맵, realm, session로 remote value로 직렬화를 수행한 결과로 둔다.
-
serialized node를 serialized nodes에 추가한다.
-
-
result를
nodes필드가 serialized nodes로 설정된browsingContext.LocateNodesResult생성규칙과 일치하는 맵으로 둔다. -
데이터 result와 함께 성공을 반환한다.
7.3.3.8. browsingContext.navigate 명령
browsingContext.navigate 명령은 navigable을 주어진 URL로 탐색한다.
- 명령 타입
-
browsingContext.Navigate= (method:"browsingContext.navigate",params: browsingContext.NavigateParameters )browsingContext.NavigateParameters= {context: browsingContext.BrowsingContext,url: text, ?wait: browsingContext.ReadinessState, } - 반환 타입
-
browsingContext.NavigateResult= {navigation: browsingContext.Navigation / null,url: text, }
-
navigable id를 command parameters의
context필드 값으로 둔다. -
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
단언: navigable은 null이 아니다.
-
wait condition을 "
committed"로 둔다. -
command parameters가
wait를 포함하고 command parameters[wait]가 "none"이 아니면, wait condition을 command parameters[wait]로 설정한다. -
url을 command parameters의
url필드 값으로 둔다. -
document를 navigable의 활성 문서로 둔다.
-
base를 document의 base URL로 둔다.
-
url record가 실패이면, 오류를 반환하되 오류 코드는 invalid argument로 한다.
-
request를 URL이 url record인 새 요청으로 둔다.
-
navigable, request, wait condition으로 탐색 대기를 수행한 결과를 반환한다.
7.3.3.9. browsingContext.print 명령
browsingContext.print 명령은 문서의 페이지화된 표현을 만들고, 이를 Base64로 인코딩된 문자열로 표현된 PDF 문서로 반환한다.
- 명령 타입
-
browsingContext.Print= (method:"browsingContext.print",params: browsingContext.PrintParameters )browsingContext.PrintParameters= {context: browsingContext.BrowsingContext, ?background: bool .default false, ?margin: browsingContext.PrintMarginParameters, ?orientation: ("portrait"/"landscape") .default "portrait", ?page: browsingContext.PrintPageParameters, ?pageRanges: [*(js-uint / text)], ?scale: (0.1..2.0) .default 1.0, ?shrinkToFit: bool .default true, }browsingContext.PrintMarginParameters= { ?bottom: (float .ge 0.0) .default 1.0, ?left: (float .ge 0.0) .default 1.0, ?right: (float .ge 0.0) .default 1.0, ?top: (float .ge 0.0) .default 1.0, } ; Minimum size is 1pt x 1pt. Conversion follows from ; https://www.w3.org/TR/css3-values/#absolute-lengthsbrowsingContext.PrintPageParameters= { ?height: (float .ge 0.0352) .default 27.94, ?width: (float .ge 0.0352) .default 21.59, } - 반환 타입
-
browsingContext.PrintResult= {data: text }
session 및 command parameters로 원격 끝 단계는 다음과 같다:
-
navigable id를 command parameters의
context필드 값으로 둔다. -
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
구현이 어떤 이유로든 navigable의 페이지화된 표현을 제공할 수 없으면 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
-
margin을 command parameters의
margin필드 값으로 두되, 있으면 그 값으로, 그렇지 않으면 필드가 기본값으로 설정된browsingContext.PrintMarginParameters와 일치하는 맵으로 둔다. -
page size를 command parameters의
page필드 값으로 두되, 있으면 그 값으로, 그렇지 않으면 필드가 기본값으로 설정된browsingContext.PrintPageParameters와 일치하는 맵으로 둔다.
참고: 최소 페이지 크기는 1 포인트이며, 이는 절대 길이에 따라 (2.54 / 72) cm이다.
-
page ranges를 command parameters의
pageRanges필드 값으로 두되, 있으면 그 값으로, 그렇지 않으면 빈 목록으로 둔다. -
document를 navigable의 활성 문서로 둔다.
-
document에 대해 다음번 애니메이션 프레임 콜백 실행 알고리즘 호출 직후:
이는 렌더링 갱신 알고리즘에 더 명시적인 방식으로 통합되어야 한다.
-
CSS media type을
print로 설정하고, 다음 용지 설정으로 PDF로 인코딩된 document의 페이지화된 표현을 생성하는 UA별 단계를 수행한 결과를 pdf data로 둔다:속성 값 cm 단위 너비 page size[" width"] if command parameters["orientation"] is "portrait" otherwise page size["height"]cm 단위 높이 page size[" height"] if command parameters["orientation"] is "portrait" otherwise page size["width"]위쪽 여백, cm 단위 margin[" top"]아래쪽 여백, cm 단위 margin[" bottom"]왼쪽 여백, cm 단위 margin[" left"]오른쪽 여백, cm 단위 margin[" right"]추가로, UA는 다음 formatting hint를 적용해야 한다:
- command parameters["
scale"]가1과 같지 않으면: - 콘텐츠의 크기를 command
parameters["
scale"] 배율만큼 확대/축소한다 - command parameters["
background"]가 false이면: - 배경 이미지의 출력을 억제한다
- command parameters["
shrinkToFit"]가 true이면: - 콘텐츠에 지정된 페이지 너비를 재정의하여 콘텐츠를 페이지 너비에 맞게 크기 조정한다
- command parameters["
-
page ranges가 비어 있지 않으면, pages를 page ranges와 pdf data에 포함된 페이지 수로 페이지 범위 파싱을 시도한 결과로 두고, 1부터 시작하는 인덱스가 pages에 포함되지 않은 모든 페이지를 pdf data에서 제거한다.
-
encoding result를 pdf data에 대해 Base64 Encode를 호출한 결과로 둔다.
-
encoded data를 encoding result의 data로 둔다.
-
body를
data필드가 encoded data로 설정된browsingContext.PrintResult생성규칙과 일치하는 맵으로 둔다. -
데이터 body와 함께 성공을 반환한다.
-
7.3.3.10. browsingContext.reload 명령
browsingContext.reload 명령은 navigable을 다시 로드한다.
- 명령 타입
-
browsingContext.Reload= (method:"browsingContext.reload",params: browsingContext.ReloadParameters )browsingContext.ReloadParameters= {context: browsingContext.BrowsingContext, ?ignoreCache: bool, ?wait: browsingContext.ReadinessState, } - 반환 타입
-
browsingContext.ReloadResult= browsingContext.NavigateResult
-
navigable id를 command parameters의
context필드 값으로 둔다. -
navigable을 navigable id로 시도하여 navigable 가져오기를 수행한 결과로 둔다.
-
단언: navigable은 null이 아니다.
-
ignore cache를 command parameters의
ignoreCache필드 값이 있으면 그 값으로, 그렇지 않으면 false로 둔다. -
wait condition을 "
committed"로 둔다. -
command parameters가 포함하는
wait가 있고 command parameters[wait]가 "none"이 아니면, wait condition을 command parameters[wait]로 설정한다. -
document를 navigable의 활성 문서로 둔다.
-
url을 document의 URL로 둔다.
-
request를 URL이 url인 새 요청으로 둔다.
-
navigable, request, wait condition, history handling "
reload", 그리고 ignore cache ignore cache로 탐색 대기를 수행한 결과를 반환한다.
7.3.3.11. browsingContext.setBypassCSP 명령
browsingContext.setBypassCSP 명령은 Content Security Policy 적용을 우회할 수 있게 한다.
참고: CSP 우회가 활성화되면, eval(), new Function(), 인라인 스크립트 및 리소스 로딩을 일반적으로 차단하는 지시자를 포함하여 모든 CSP 지시자가 우회된다.
- 명령 타입
-
browsingContext.SetBypassCSP= (method:"browsingContext.setBypassCSP",params: browsingContext.SetBypassCSPParameters )browsingContext.SetBypassCSPParameters= {bypass: true / null, ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], } - 반환 타입
-
browsingContext.SetBypassCSPResult= EmptyResult
원격 끝은 CSP 우회 구성을 가지며, 이는 WebDriver 구성으로서 연관 타입 boolean을 가진다.
navigable navigable이 주어졌을 때 WebDriver BiDi CSP가 우회되는지 단계는 다음과 같다:
-
top-level traversable을 navigable의 최상위 traversable로 둔다.
-
bypass CSP enabled를 top-level traversable에 대한 CSP 우회 구성의 WebDriver 구성 값 가져오기 결과로 둔다.
-
단언: bypass CSP enabled는
true또는 unset이다. -
bypass CSP enabled가 unset이면 false를 반환한다.
-
true를 반환한다.
command parameters가 주어졌을 때 원격 끝 단계는 다음과 같다:
-
bypass를 command parameters["
bypass"]로 둔다. -
bypass가 null이면, bypass를 unset으로 설정한다.
-
command parameters에 대해 CSP 우회 구성 bypass인 WebDriver 구성 저장을 시도한다.
-
데이터 null과 함께 성공을 반환한다.
7.3.3.12. browsingContext.setViewport 명령
browsingContext.setViewport 명령은 주어진 최상위 traversable의 특정 뷰포트 특성(예: viewport width 및 viewport height)을 수정한다.
- 명령 타입
-
browsingContext.SetViewport= (method:"browsingContext.setViewport",params: browsingContext.SetViewportParameters )browsingContext.SetViewportParameters= { ?context: browsingContext.BrowsingContext, ?viewport: browsingContext.Viewport / null, ?devicePixelRatio: (float .gt 0.0) / null, ?userContexts: [+browser.UserContext], }browsingContext.Viewport= {width: js-uint,height: js-uint, } - 반환 타입
-
browsingContext.SetViewportResult= EmptyResult
-
device pixel ratio가 null이 아니면:
-
지정된 navigable에 현재 로드된 문서에 대해:
-
source set에서 이미지 소스 선택 단계가 실행될 때, 이미지를 선택할 때 구현의 픽셀 밀도가 device pixel ratio로 설정된 것처럼 동작한다.
-
resolution media feature의 목적상, 구현의 해상도가 페이지 줌으로 스케일된 device pixel ratio dppx인 것처럼 동작한다.
-
-
설정한다. device pixel ratio overrides[navigable]를 device pixel ratio로 설정한다.
참고: 이는 § 8.3.1 Device pixel ratio 결정의 패치 때문에 효과를 가진다.
-
-
그렇지 않으면:
-
지정된 navigable에 현재 로드된 문서에 대해:
-
source set에서 이미지 소스 선택 단계가 실행될 때, 이전의 이 단계 호출로 이루어진 변경 없이 구현의 기본 동작을 사용한다.
-
resolution media feature의 목적상, 이전의 이 단계 호출로 이루어진 변경 없이 구현의 기본 동작을 사용한다.
-
-
제거한다. navigable을 device pixel ratio overrides에서 제거한다.
-
-
지정된 navigable에 현재 로드된 문서에 대해 media query 평가 및 변경 보고를 실행한다.
-
viewport가 null이 아니면, navigable의 layout viewport의 너비를 CSS 픽셀 단위인 viewport의 width로 설정하고, navigable의 layout viewport의 높이를 CSS 픽셀 단위인 viewport의 height로 설정한다.
-
그렇지 않으면, navigable의 layout viewport를 구현 정의 기본값으로 설정한다.
새 navigable navigable 안에 문서를 생성한 뒤, WebDriver BiDi 프리로드 스크립트 실행 알고리즘이 호출되기 전에:
TODO: 대신 이를 html 명세의 훅으로 이동한다.
-
user context를 navigable의 연관된 사용자 컨텍스트로 둔다.
-
navigable이 최상위 traversable이면:
-
navigable에 대해 geolocation 재정의 갱신을 한다.
-
navigable에 대해 에뮬레이트된 forced colors 테마 갱신을 한다.
-
screen orientation overrides map이 user context를 포함하면, navigable 및 screen orientation overrides map[user context]으로 에뮬레이트된 화면 방향 설정을 한다.
-
-
viewport overrides map이 user context를 포함하면:
-
navigable이 최상위 traversable이고 viewport overrides map[user context]의 viewport가 null이 아니면:
-
navigable 및 viewport overrides map[user context]의 viewport로 viewport 설정을 한다.
-
-
viewport overrides map[user context]의 devicePixelRatio가 null이 아니면:
-
navigable 및 viewport overrides map[user context]의 devicePixelRatio로 device pixel ratio 재정의 설정을 한다.
-
-
-
navigable에 대해 scrollbar type 재정의 갱신을 한다.
command parameters로 원격 끝 단계는 다음과 같다:
-
구현이 어떤 이유로든 주어진 command parameters로 layout viewport 매개변수를 조정할 수 없으면, 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
-
command parameters가 "
userContexts"를 포함하고 command parameters가 "context"를 포함하면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
navigables를 집합으로 둔다.
-
command parameters의
context필드가 있으면:-
navigable id를 command parameters의
context필드 값으로 둔다. -
navigable을 navigable id로 시도하여 navigable 가져오기를 수행한 결과로 둔다.
-
navigable이 최상위 traversable이 아니면, 오류를 반환하되 오류 코드는 invalid argument로 한다.
-
navigable을 navigables에 추가한다.
-
-
그렇지 않고, command parameters의
userContexts필드가 있으면:-
user contexts를 command parameters["
userContexts"]로 시도하여 유효한 사용자 컨텍스트 가져오기를 수행한 결과로 둔다. -
user contexts의 각 user context에 대해:
-
설정한다. viewport overrides map[user context]을 구조체로 설정한다.
-
command parameters가 "
viewport"를 포함하면:-
viewport overrides map[user context]의 viewport를 command parameters["
viewport"]로 설정한다.
-
-
command parameters가 "
devicePixelRatio"를 포함하면:-
viewport overrides map[user context]의 devicePixelRatio를 command parameters["
devicePixelRatio"]로 설정한다.
-
-
각 최상위 traversable 중 그 연관된 사용자 컨텍스트가 user context인 모든 목록의 top-level traversable에 대해:
-
top-level traversable을 navigables에 추가한다.
-
-
-
-
그렇지 않으면, 오류를 반환하되 오류 코드는 invalid argument로 한다.
-
command parameters가
viewport필드를 포함하면:-
viewport를 command parameters["
viewport"]로 둔다. -
navigables의 각 navigable에 대해:
-
navigable 및 viewport로 viewport 설정을 한다.
-
navigable의 활성 문서로 CSSOM View § 13.1 Resizing viewports 단계를 실행한다.
-
-
-
command parameters가
devicePixelRatio필드를 포함하면:-
device pixel ratio를 command parameters["
devicePixelRatio"]로 둔다. -
navigables의 각 navigable에 대해:
-
navigable 및 모든 자손 navigable에 대해:
-
navigable 및 device pixel ratio로 device pixel ratio 재정의 설정을 한다.
-
-
-
-
데이터 null과 함께 성공을 반환한다.
7.3.3.13. browsingContext.traverseHistory 명령
browsingContext.traverseHistory 명령은 주어진 navigable의 이력을 delta만큼 순회한다.
- 명령 타입
-
browsingContext.TraverseHistory= (method:"browsingContext.traverseHistory",params: browsingContext.TraverseHistoryParameters )browsingContext.TraverseHistoryParameters= {context: browsingContext.BrowsingContext,delta: js-int, } - 반환 타입
-
browsingContext.TraverseHistoryResult= EmptyResult
-
navigable을 command parameters["
context"]로 시도하여 navigable 가져오기를 수행한 결과로 둔다. -
navigable이 최상위 traversable이 아니면, 오류를 반환하되 오류 코드는 invalid argument로 한다.
-
단언: navigable은 null이 아니다.
-
delta를 command parameters["
delta"]로 둔다. -
resume id를 고유한 문자열로 둔다.
-
navigable의 session history traversal queue에 다음 단계를 실행하는 태스크를 큐에 넣는다:
-
all steps를 navigable에 대해 사용된 모든 이력 단계 가져오기를 수행한 결과로 둔다.
-
current index를 all steps 안에서 navigable의 현재 session history step의 인덱스로 둔다.
-
target index를 current index와 delta의 합으로 둔다.
-
all steps[target index]가 존재하지 않으면 valid entry를 false로, 그렇지 않으면 true로 둔다.
-
"
check history", resume id, 그리고 valid entry로 재개한다.
-
-
is valid entry를 «"
check history"» 및 resume id로 await한 결과로 둔다. -
is valid entry가 false이면, 오류 코드 no such history entry인 오류를 반환한다.
-
delta 및 navigable이 주어졌을 때 delta만큼 이력 순회를 한다.
작성된 알고리즘에는 경합 조건이 있다. 대상 session history entry로 탐색하려 할 때는 이미 그것이 존재하지 않을 수 있기 때문이다. 이력 탐색 대기를 지원하게 되면 이를 더 견고하게 처리할 수 있다.
-
TODO: 이력 순회가 완료될 때까지 기다리는 것을 지원한다.
-
body를
browsingContext.TraverseHistoryResult생성규칙과 일치하는 맵으로 둔다. -
데이터 body와 함께 성공을 반환한다.
context 및 navigation status navigation status가 주어졌을 때 WebDriver BiDi page show 단계는 다음과 같다:
`browsingContext.pageShow 이벤트를 노출할 것인가? 이 경우 이를 bfcache 복원 시뿐 아니라 `pageshow`가 방출될 때마다 호출해야 하며, persisted 상태도 데이터에 추가해야 한다.
context 및 navigation status navigation status가 주어졌을 때 WebDriver BiDi pop state 단계는 다음과 같다:
7.3.4. 이벤트
7.3.4.1. browsingContext.contextCreated 이벤트
- 이벤트 타입
-
browsingContext.ContextCreated= (method:"browsingContext.contextCreated",params: browsingContext.Info )
session 및 navigable이 주어졌을 때 context created 이벤트를 재귀적으로 방출하려면:
-
session 및 navigable로 context created 이벤트 방출을 한다.
-
navigable의 각 자식 navigable child에 대해:
-
session 및 child가 주어졌을 때 context created 이벤트를 재귀적으로 방출한다.
-
session 및 navigable이 주어졌을 때 context created 이벤트 방출을 하려면:
-
params를 navigable, 0, true가 주어졌을 때 navigable 정보 가져오기를 수행한 결과로 둔다.
-
body를
browsingContext.ContextCreated생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
session 및 body로 이벤트 방출을 한다.
원격 끝 이벤트 트리거는 navigable navigable 및 navigable opener navigable이 주어졌을 때의 WebDriver BiDi navigable created 단계이다:
-
opener navigable이 제공되면, navigable의 원래 opener를 opener navigable로 설정한다.
-
navigable로 navigable 캐시 동작이 "
bypass"이면, navigable에서 발생한 네트워크 요청에 대한 구현별 리소스 캐시를 비활성화하기 위한 구현 정의 단계를 수행한다. -
related navigables를 navigable을 포함하는 집합으로 둔다.
-
"
browsingContext.contextCreated" 및 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 navigable가 주어졌을 때 context created 이벤트 방출을 한다.
-
session, navigables 및 include global이 주어졌을 때 구독 우선순위 1을 가지는 원격 끝 구독 단계는 다음과 같다:
-
navigables 안의 각 navigable에 대해:
-
session 및 navigable가 주어졌을 때 context created 이벤트를 재귀적으로 방출한다.
-
7.3.4.2. browsingContext.contextDestroyed 이벤트
- 이벤트 타입
-
browsingContext.ContextDestroyed= (method:"browsingContext.contextDestroyed",params: browsingContext.Info )
원격 끝 이벤트 트리거는 navigable navigable이 주어졌을 때의 WebDriver BiDi navigable destroyed 단계이다:
-
params를 navigable, null, true가 주어졌을 때 navigable 정보 가져오기를 수행한 결과로 둔다.
-
body를
browsingContext.ContextDestroyed생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
related navigables를 navigable의 부모가 null이 아니면 그것을 포함하는 집합으로, 그렇지 않으면 빈 집합으로 둔다.
-
"
browsingContext.contextDestroyed" 및 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 body로 이벤트 방출을 한다.
-
subscriptions to remove를 집합으로 둔다.
-
session의 구독에 있는 각 subscription에 대해:
-
subscription의 최상위 traversable id가 navigable의 navigable id를 포함하면;
-
navigable의 navigable id를 subscription의 최상위 traversable id에서 제거한다.
-
subscription의 최상위 traversable id가 비어 있으면:
-
subscription을 subscriptions to remove에 추가한다.
-
-
-
-
이 이벤트를 활성 문서를 가진 browsing context에 대해서만 발생시켜야 하는지는 명확하지 않다. 탐색은 context가 접근 불가능해지게 할 수도 있지만, bfcache 때문에 아직 폐기되지 않을 수도 있다.
7.3.4.3. browsingContext.navigationStarted 이벤트
- 이벤트 타입
-
browsingContext.NavigationStarted= (method:"browsingContext.navigationStarted",params: browsingContext.NavigationInfo )
-
params를 navigable 및 navigation status가 주어졌을 때 navigation 정보 가져오기를 수행한 결과로 둔다.
-
body를
browsingContext.NavigationStarted생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
navigation id를 navigation status의 id로 둔다.
-
related navigables를 navigable을 포함하는 집합으로 둔다.
-
"
navigation started", navigation id, 그리고 navigation status로 재개한다. -
"
browsingContext.navigationStarted" 및 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 body로 이벤트 방출을 한다.
-
7.3.4.4. browsingContext.fragmentNavigated 이벤트
- 이벤트 타입
-
browsingContext.FragmentNavigated= (method:"browsingContext.fragmentNavigated",params: browsingContext.NavigationInfo )
-
params를 navigable 및 navigation status가 주어졌을 때 navigation 정보 가져오기를 수행한 결과로 둔다.
-
body를
browsingContext.FragmentNavigated생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
navigation id를 navigation status의 id로 둔다.
-
related navigable를 navigable을 포함하는 집합으로 둔다.
-
"
fragment navigated", navigation id, 그리고 navigation status로 재개한다. -
"
browsingContext.fragmentNavigated" 및 related navigable가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 body로 이벤트 방출을 한다.
-
7.3.4.5. browsingContext.historyUpdated 이벤트
- 이벤트 타입
-
browsingContext.HistoryUpdated= (method:"browsingContext.historyUpdated",params: browsingContext.HistoryUpdatedParameters )browsingContext.HistoryUpdatedParameters= {context: browsingContext.BrowsingContext,timestamp: js-uint,url: text, ?userContext: browser.UserContext }
-
url을 navigable의 활성 browsing context의 활성 문서의 URL이 주어졌을 때 URL 직렬화기를 실행한 결과로 둔다.
-
user context id를 navigable의 연관된 사용자 컨텍스트의 사용자 컨텍스트 id로 둔다.
-
timestamp를 현재 날짜와 시간을 UTC로 나타내는 시간 값으로 둔다.
-
params를
browsingContext.HistoryUpdatedParameters생성규칙과 일치하는 맵으로 두고,url필드를 url로 설정하고,timestamp필드를 timestamp로 설정하고,context필드를 navigable의 navigable id로 설정하고userContext필드를 user context id로 설정한다. -
body를
browsingContext.HistoryUpdated생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
related browsing contexts를 navigable의 활성 browsing context를 포함하는 집합으로 둔다.
-
"
browsingContext.historyUpdated" 및 related browsing contexts가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 body로 이벤트 방출을 한다.
-
7.3.4.6. browsingContext.domContentLoaded 이벤트
- 이벤트 타입
-
browsingContext.DomContentLoaded= (method:"browsingContext.domContentLoaded",params: browsingContext.NavigationInfo )
-
params를 navigable 및 navigation status가 주어졌을 때 navigation 정보 가져오기를 수행한 결과로 둔다.
-
body를
browsingContext.DomContentLoaded생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
related navigables를 navigable을 포함하는 집합으로 둔다.
-
navigation id를 navigation status의 id로 둔다.
-
"
domContentLoaded", navigation id, 그리고 navigation status로 재개한다. -
"
browsingContext.domContentLoaded" 및 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 body로 이벤트 방출을 한다.
-
7.3.4.7. browsingContext.load 이벤트
- 이벤트 타입
-
browsingContext.Load= (method:"browsingContext.load",params: browsingContext.NavigationInfo )
-
params를 navigable 및 navigation status가 주어졌을 때 navigation 정보 가져오기를 수행한 결과로 둔다.
-
body를
browsingContext.Load생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
related navigables를 navigable을 포함하는 집합으로 둔다.
-
navigation id를 navigation status의 id로 둔다.
-
"
load", navigation id 및 navigation status로 재개한다. -
"
browsingContext.load" 및 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 body로 이벤트 방출을 한다.
-
7.3.4.8. browsingContext.downloadWillBegin 이벤트
- 이벤트 타입
-
browsingContext.DownloadWillBegin= (method:"browsingContext.downloadWillBegin",params: browsingContext.DownloadWillBeginParams )browsingContext.DownloadWillBeginParams= {suggestedFilename: text, browsingContext.BaseNavigationInfo }
-
navigation info를 navigable 및 navigation status가 주어졌을 때 navigation 정보 가져오기를 수행한 결과로 둔다.
-
params를
browsingContext.DownloadWillBeginParams생성규칙과 일치하는 맵으로 두고,context필드를 navigation info["context"]로 설정하고,navigation필드를 navigation info["navigation"]로 설정하고,timestamp필드를 navigation info["timestamp"]로 설정하고,url필드를 navigation info["url"]로 설정하고suggestedFilename필드를 navigation status의 suggestedFilename으로 설정한다. -
body를
browsingContext.DownloadWillBegin생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
navigation id를 navigation status의 id로 둔다.
-
related navigables를 navigable을 포함하는 집합으로 둔다.
-
"
download started", navigation id, 그리고 navigation status로 재개한다. -
"
browsingContext.downloadWillBegin" 및 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 body로 이벤트 방출을 한다.
-
-
download behavior를 navigable로 download behavior 가져오기를 수행한 결과로 둔다.
-
download behavior를 반환한다.
7.3.4.9. browsingContext.downloadEnd 이벤트
- 이벤트 타입
-
browsingContext.DownloadEnd= (method:"browsingContext.downloadEnd",params: browsingContext.DownloadEndParams )browsingContext.DownloadEndParams= { ( browsingContext.DownloadCanceledParams // browsingContext.DownloadCompleteParams ) }browsingContext.DownloadCanceledParams= (status:"canceled", browsingContext.BaseNavigationInfo )browsingContext.DownloadCompleteParams= (status:"complete",filepath: text / null, browsingContext.BaseNavigationInfo )
-
navigation info를 navigable 및 navigation status가 주어졌을 때 navigation 정보 가져오기를 수행한 결과로 둔다.
-
navigation info["
status"]가 "complete" 또는 "canceled"와 같다고 단언한다. -
navigation info["
status"]가 "complete"이면, params를browsingContext.DownloadCompleteParams생성규칙과 일치하는 맵으로 두고,filepath필드를 navigation status의 downloadedFilepath로 설정하고,context필드를 navigation info["context"]로 설정하고,navigation필드를 navigation info["navigation"]로 설정하고,timestamp필드를 navigation info["timestamp"]로 설정하고,url필드를 navigation info["url"]로 설정한다.참고: 어떤 이유로든 filepath를 사용할 수 없는 경우, 완료된 다운로드에 대해
filepath는 null일 수 있다. -
그렇지 않으면, params를
browsingContext.DownloadCanceledParams생성규칙과 일치하는 맵으로 두고,context필드를 navigation info["context"]로 설정하고,navigation필드를 navigation info["navigation"]로 설정하고,timestamp필드를 navigation info["timestamp"]로 설정하고,url필드를 navigation info["url"]로 설정한다. -
body를
browsingContext.DownloadEnd생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
related navigables를 navigable을 포함하는 집합으로 둔다.
-
"
browsingContext.downloadEnd" 및 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 body로 이벤트 방출을 한다.
-
7.3.4.10. browsingContext.navigationAborted 이벤트
- 이벤트 타입
-
browsingContext.NavigationAborted= (method:"browsingContext.navigationAborted",params: browsingContext.NavigationInfo )
-
params를 navigable 및 navigation status가 주어졌을 때 navigation 정보 가져오기를 수행한 결과로 둔다.
-
body를
browsingContext.NavigationAborted생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
navigation id를 navigation status의 id로 둔다.
-
related navigables를 navigable을 포함하는 집합으로 둔다.
-
"
navigation aborted", navigation id, 그리고 navigation status로 재개한다. -
"
browsingContext.navigationAborted" 및 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 body로 이벤트 방출을 한다.
-
7.3.4.11. browsingContext.navigationCommitted 이벤트
- 이벤트 타입
-
browsingContext.NavigationCommitted= (method:"browsingContext.navigationCommitted",params: browsingContext.NavigationInfo )
-
params를 navigable 및 navigation status가 주어졌을 때 navigation 정보 가져오기를 수행한 결과로 둔다.
-
body를
browsingContext.NavigationCommitted생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
related navigables를 navigable을 포함하는 집합으로 둔다.
-
navigation id를 navigation status의 id로 둔다.
-
"
navigation committed", navigation id, 그리고 navigation status로 재개한다. -
"
browsingContext.navigationCommitted" 및 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 body로 이벤트 방출을 한다.
-
7.3.4.12. browsingContext.navigationFailed 이벤트
- 이벤트 타입
-
browsingContext.NavigationFailed= (method:"browsingContext.navigationFailed",params: browsingContext.NavigationInfo )
-
params를 navigable 및 navigation status가 주어졌을 때 navigation 정보 가져오기를 수행한 결과로 둔다.
-
body를
browsingContext.NavigationFailed생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
navigation id를 navigation status의 id로 둔다.
-
related navigables를 navigable을 포함하는 집합으로 둔다.
-
"
navigation failed", navigation id, 그리고 navigation status로 재개한다. -
"
browsingContext.navigationFailed" 및 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 body로 이벤트 방출을 한다.
-
7.3.4.13. browsingContext.userPromptClosed 이벤트
- 이벤트 타입
-
browsingContext.UserPromptClosed= (method:"browsingContext.userPromptClosed",params: browsingContext.UserPromptClosedParameters )browsingContext.UserPromptClosedParameters= {context: browsingContext.BrowsingContext,accepted: bool,type: browsingContext.UserPromptType, ?userContext: browser.UserContext, ?userText: text }
Window
window, 문자열 type, boolean accepted 및 선택적 text user
text
(기본값: null)가 주어졌을 때의 WebDriver
BiDi user prompt closed 단계이다.
-
navigable을 window의 navigable로 둔다.
-
navigable id를 navigable에 대한 navigable id로 둔다.
-
user context id를 navigable의 연관된 사용자 컨텍스트의 사용자 컨텍스트 id로 둔다.
-
params를
browsingContext.UserPromptClosedParameters생성규칙과 일치하는 맵으로 두고,context필드를 navigable id로 설정하고,userContext필드를 user context id로 설정하고,accepted필드를 accepted로 설정하고,type필드를 type로 설정하고, user text가 null이 아니면userText필드를 user text로 설정하며, 그렇지 않으면 생략한다. -
body를
BrowsingContextUserPromptClosedEvent생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
related navigables를 navigable을 포함하는 집합으로 둔다.
-
"
browsingContext.userPromptClosed" 및 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 body로 이벤트 방출을 한다.
-
7.3.4.14. browsingContext.userPromptOpened 이벤트
- 이벤트 타입
-
browsingContext.UserPromptOpened= (method:"browsingContext.userPromptOpened",params: browsingContext.UserPromptOpenedParameters )browsingContext.UserPromptOpenedParameters= {context: browsingContext.BrowsingContext,handler: session.UserPromptHandlerType,message: text,type: browsingContext.UserPromptType, ?userContext: browser.UserContext, ?defaultValue: text }
-
user context를 navigable의 연관된 사용자 컨텍스트로 둔다.
-
처리되지 않은 프롬프트 동작 재정의 맵이 user context를 포함하면:
-
unhandled prompt behavior override를 처리되지 않은 프롬프트 동작 재정의 맵[user context]로 둔다.
-
unhandled prompt behavior override[type]가 null이 아니면, unhandled prompt behavior override[type]를 반환한다.
-
unhandled prompt behavior override[
"default"]가 null이 아니면, unhandled prompt behavior override["default"]를 반환한다.
-
-
handler configuration을 type으로 프롬프트 핸들러 가져오기를 수행한 결과로 둔다.
-
handler configuration의 handler를 반환한다.
Window
window, 문자열 type, 문자열 message, 및 선택적 text default
value
(기본값: null)가 주어졌을 때의 WebDriver
BiDi user prompt opened 단계이다.
-
navigable을 window의 navigable로 둔다.
-
navigable id를 navigable에 대한 navigable id로 둔다.
-
user context id를 navigable의 연관된 사용자 컨텍스트의 사용자 컨텍스트 id로 둔다.
-
handler를 type 및 navigable로 navigable의 사용자 프롬프트 핸들러 가져오기를 수행한 결과로 둔다.
-
params를
browsingContext.UserPromptOpenedParameters생성규칙과 일치하는 맵으로 두고,context필드를 navigable id로 설정하고,userContext필드를 user context id로 설정하고,type필드를 type로 설정하고,message필드를 message로 설정하고, default value가 null이 아니면defaultValue필드를 default value로 설정하며, 그렇지 않으면 생략하고,handler필드를 handler로 설정한다. -
body를
browsingContext.UserPromptOpened생성규칙과 일치하는 맵으로 두고,params필드를 params로 설정한다. -
related navigables를 navigable을 포함하는 집합으로 둔다.
-
"
browsingContext.userPromptOpened" 및 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
session 및 body로 이벤트 방출을 한다.
-
-
handler가 "
ignore"이면, handler를 "none"으로 설정한다. -
handler를 반환한다.
7.4. emulation 모듈
emulation 모듈은 브라우저 API의 에뮬레이션과 관련된 명령 및 이벤트를 포함한다.
7.4.1. 정의
EmulationCommand = (
emulation.SetForcedColorsModeThemeOverride //
emulation.SetGeolocationOverride //
emulation.SetLocaleOverride //
emulation.SetNetworkConditions //
emulation.SetScreenOrientationOverride //
emulation.SetScreenSettingsOverride //
emulation.SetScriptingEnabled //
emulation.SetScrollbarTypeOverride //
emulation.SetTimezoneOverride //
emulation.SetTouchOverride //
emulation.SetUserAgentOverride
)
EmulationResult = (
emulation.SetForcedColorsModeThemeOverrideResult /
emulation.SetGeolocationOverrideResult /
emulation.SetLocaleOverrideResult /
emulation.SetScreenOrientationOverrideResult /
emulation.SetScriptingEnabledResult /
emulation.SetScrollbarTypeOverrideResult /
emulation.SetTimezoneOverrideResult /
emulation.SetTouchOverrideResult /
emulation.SetUserAgentOverrideResult
)
BiDi 세션은 에뮬레이트된 user agent를 가지며, 이는 구조체이고 기본 user agent라는 이름의 항목을 가지며, 이는 문자열 또는 null이고, 사용자 컨텍스트 user agent라는 이름의 항목을 가지며, 이는 사용자 컨텍스트와 문자열 사이의 weak map이고, navigable user agent라는 이름의 항목을 가지며, 이는 navigable와 문자열 사이의 weak map이다.
BiDi 세션은 에뮬레이트된 maxTouchPoints를 가지며, 이는 구조체이고, default라는 이름의 항목을 가지며, 이는 정수 또는 null이고 처음에는 null이다; user contexts라는 이름의 항목을 가지며, 이는 사용자 컨텍스트와 정수 사이의 weak map이고, 처음에는 비어 있다; 그리고 navigables라는 이름의 항목을 가지며, 이는 navigable와 정수 사이의 weak map이고, 처음에는 비어 있다.
screen orientation 재정의는 다음을 가지는 구조체이다:
원격 끝은 screen orientation overrides map을 가지며, 이는 사용자 컨텍스트와 screen orientation 재정의 사이의 weak map이다.
7.4.2. 명령
7.4.2.1. emulation.setForcedColorsModeThemeOverride 명령
emulation.setForcedColorsModeThemeOverride 명령은 주어진 최상위 traversable 또는 사용자 컨텍스트에서 forced colors 모드 테마 특성을 수정한다.
- 명령 타입
-
emulation.SetForcedColorsModeThemeOverride= (method:"emulation.setForcedColorsModeThemeOverride",params: emulation.SetForcedColorsModeThemeOverrideParameters )emulation.SetForcedColorsModeThemeOverrideParameters= {theme: emulation.ForcedColorsModeTheme / null, ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], }emulation.ForcedColorsModeTheme="light"/"dark" - 반환 타입
-
emulation.SetForcedColorsModeThemeOverrideResult= EmptyResult
참고: CSS 명세에서 대응되는 enum 매핑은 ForcedColorsModeAutomationTheme를
참조한다.
원격 끝은 forced colors 모드 테마 재정의 구성을 가지며, 이는 WebDriver 구성으로서 연관 타입 string을 가진다.
-
theme를 navigable에 대한 forced colors 모드 테마 재정의 구성의 WebDriver 구성 값 가져오기 결과로 둔다.
-
단언: theme는 "
light", "dark" 또는 unset이다. -
theme가 unset이면, theme를 "
none"으로 설정한다. -
navigable 및 theme로 에뮬레이트된 forced colors 테마 데이터 설정을 한다.
command parameters로 원격 끝 단계는 다음과 같다:
-
theme를 command parameters["
theme"]로 둔다. -
theme가 null이면, theme를 unset으로 설정한다.
-
구현이 theme 설정을 지원하지 않으면, 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
-
affected navigables를 command parameters에 대해 forced colors 모드 테마 재정의 구성 theme인 WebDriver 구성 저장을 시도한 결과로 둔다.
-
affected navigables의 각 navigable에 대해:
-
navigable에 대해 에뮬레이트된 forced colors 테마 갱신을 한다.
-
-
데이터 null과 함께 성공을 반환한다.
7.4.2.2. emulation.setGeolocationOverride 명령
emulation.setGeolocationOverride 명령은 주어진 최상위 traversable 또는 사용자 컨텍스트에서 geolocation 특성을 수정한다.
- 명령 타입
-
emulation.SetGeolocationOverride= (method:"emulation.setGeolocationOverride",params: emulation.SetGeolocationOverrideParameters )emulation.SetGeolocationOverrideParameters= { ( (coordinates: emulation.GeolocationCoordinates / null) // (error: emulation.GeolocationPositionError) ), ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], }emulation.GeolocationCoordinates= {latitude: -90.0..90.0,longitude: -180.0..180.0, ?accuracy: (float .ge 0.0) .default 1.0, ?altitude: float / null .default null, ?altitudeAccuracy: (float .ge 0.0) / null .default null, ?heading: (0.0...360.0) / null .default null, ?speed: (float .ge 0.0) / null .default null, }emulation.GeolocationPositionError= {type:"positionUnavailable"} - 반환 타입
-
emulation.SetGeolocationOverrideResult= EmptyResult
geolocation 재정의는 다음을 가지는 구조체이다:
-
latitude라는 이름의 항목. 이는 float이다; -
longitude라는 이름의 항목. 이는 float이다; -
accuracy라는 이름의 항목. 이는 float이다; -
altitude라는 이름의 항목. 이는 float 또는 null이다; -
altitudeAccuracy라는 이름의 항목. 이는 float 또는 null이다; -
heading라는 이름의 항목. 이는 float 또는 null이다; -
speed라는 이름의 항목. 이는 float 또는 null이다.
원격 끝은 geolocation 재정의 구성을 가지며, 이는 WebDriver 구성으로서 연관 타입 geolocation 재정의를 가진다.
-
emulated position data를 navigable에 대한 geolocation 재정의 구성의 WebDriver 구성 값 가져오기 결과로 둔다.
-
emulated position data가 unset이면, emulated position data를 null로 설정한다.
-
navigable 및 emulated position data로 에뮬레이트된 위치 데이터 설정을 한다.
command parameters로 원격 끝 단계는 다음과 같다:
-
command parameters가 "
coordinates"를 포함하고 command parameters["coordinates"]가 "altitudeAccuracy"를 포함하며 command parameters["coordinates"]가 "altitude"를 포함하지 않으면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
command parameters가 "
error"를 포함하면:-
command parameters["
error"]["type"]이 "positionUnavailable"와 같다고 단언한다. -
emulated position data를 GeolocationPositionError 생성규칙과 일치하는 맵으로 두고,
code필드를 POSITION_UNAVAILABLE로 설정하고message필드를 빈 문자열로 설정한다.참고:
message는 geolocation 명세에 따라 구현에서 무시된다.
-
-
그렇지 않으면, emulated position data를 command parameters["
coordinates"]로 둔다. -
emulated position data가 null이면, emulated position data를 unset으로 설정한다.
-
affected navigables를 command parameters에 대해 geolocation 재정의 구성 emulated position data인 WebDriver 구성 저장을 시도한 결과로 둔다.
-
affected navigables의 각 navigable에 대해:
-
navigable에 대해 geolocation 재정의 갱신을 한다.
-
-
데이터 null과 함께 성공을 반환한다.
7.4.2.3. emulation.setLocaleOverride 명령
emulation.setLocaleOverride 명령은 주어진 최상위 traversable 또는 사용자 컨텍스트의 locale을 수정한다.
- 명령 타입
-
emulation.SetLocaleOverride= (method:"emulation.setLocaleOverride",params: emulation.SetLocaleOverrideParameters )emulation.SetLocaleOverrideParameters= {locale: text / null, ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], } - 반환 타입
-
emulation.SetLocaleOverrideResult= EmptyResult
환경 설정 객체 environment settings가 주어졌을 때 WebDriver BiDi 에뮬레이트된 언어 단계는 다음과 같다:
-
related navigables를 environment settings가 주어졌을 때 관련 navigable 가져오기를 수행한 결과로 둔다.
-
related navigables의 각 navigable에 대해:
-
top-level traversable을 navigable의 최상위 traversable로 둔다.
-
user context를 top-level traversable의 연관된 사용자 컨텍스트로 둔다.
-
locale overrides map이 top-level traversable를 포함하면, locale overrides map[top-level traversable]를 반환한다.
-
locale overrides map이 user context를 포함하면, locale overrides map[user context]를 반환한다.
-
-
null을 반환한다
command parameters로 원격 끝 단계는 다음과 같다:
-
command parameters가 "
userContexts"를 포함하고 command parameters가 "contexts"를 포함하면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
command parameters가 "
userContexts"를 포함하지 않고 command parameters가 "contexts"를 포함하지 않으면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
emulated locale을 command parameters["
locale"]로 둔다. -
emulated locale이 null이 아니고 IsStructurallyValidLanguageTag(emulated locale)가 false를 반환하면, 오류를 반환하되 오류 코드는 invalid argument로 한다.
-
navigables를 집합으로 둔다.
-
command parameters의
contexts필드가 있으면:-
navigables를 command parameters["
contexts"]로 id로 유효한 최상위 traversable 가져오기를 시도한 결과로 둔다.
-
-
그렇지 않으면:
-
command parameters의
userContexts필드가 있다고 단언한다. -
user contexts를 command parameters["
userContexts"]로 유효한 사용자 컨텍스트 가져오기를 시도한 결과로 둔다. -
user contexts의 각 user context에 대해:
-
emulated locale이 null이면, user context를 locale overrides map에서 제거한다.
-
그렇지 않으면, locale overrides map[user context]을 emulated locale로 설정한다.
-
각 최상위 traversable 중 그 연관된 사용자 컨텍스트가 user context인 모든 목록의 top-level traversable에 대해:
-
top-level traversable을 navigables에 추가한다.
-
-
-
-
navigables의 각 navigable에 대해:
-
emulated locale이 null이면, navigable을 locale overrides map에서 제거한다.
-
그렇지 않으면, locale overrides map[navigable]을 emulated locale로 설정한다.
-
-
데이터 null과 함께 성공을 반환한다.
7.4.2.4. emulation.setNetworkConditions 명령
emulation.setNetworkConditions 명령은 주어진 브라우징 컨텍스트 또는 사용자 컨텍스트에 대해 특정 네트워크 조건을 에뮬레이트한다.
- 명령 타입
-
emulation.SetNetworkConditions= (method:"emulation.setNetworkConditions",params: emulation.SetNetworkConditionsParameters )emulation.SetNetworkConditionsParameters= {networkConditions: emulation.NetworkConditions / null, ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], }emulation.NetworkConditions= emulation.NetworkConditionsOfflineemulation.NetworkConditionsOffline= {type:"offline"} - 반환 타입
-
emulation.SetNetworkConditionsResult= EmptyResult
네트워크 조건 적용을 하려면:
-
각 WebSocket 객체 webSocket에 대해:
-
realm을 webSocket의 관련 Realm으로 둔다.
-
environment settings를 그 realm 실행 컨텍스트의 Realm 컴포넌트가 realm인 환경 설정 객체로 둔다.
-
environment settings로 WebDriver BiDi 네트워크가 오프라인인지를 수행한 결과가 true이면:
-
webSocket에 대해 WebSocket 연결 실패 처리를 한다.
-
-
-
각 WebTransport 객체 webTransport에 대해:
-
realm을 webSocket의 관련 Realm으로 둔다.
-
environment settings를 그 realm 실행 컨텍스트의 Realm 컴포넌트가 realm인 환경 설정 객체로 둔다.
-
environment settings로 WebDriver BiDi 네트워크가 오프라인인지를 수행한 결과가 true이면:
-
webTransport에 대해 WebTransport 정리를 한다.
-
-
command parameters 및 session로 원격 끝 단계는 다음과 같다:
-
command parameters가 "
userContexts"를 포함하고 command parameters가 "context"를 포함하면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
emulated network conditions를 null로 둔다.
-
command parameters["
networkConditions"]가 null이 아니고 command parameters["networkConditions"]["type"]이 "offline"와 같으면, emulated network conditions를 offline이 true로 설정된 새 에뮬레이트된 네트워크 조건 구조체로 설정한다. -
command parameters의
contexts필드가 있으면:-
navigables를 command parameters["
contexts"]로 id로 유효한 최상위 traversable 가져오기를 시도한 결과로 둔다. -
navigables의 각 navigable에 대해:
-
emulated network conditions가 null이면, navigable을 session의 에뮬레이트된 네트워크 조건의 navigable network conditions에서 제거한다
-
그렇지 않으면, session의 에뮬레이트된 네트워크 조건의 navigable network conditions[navigable]을 emulated network conditions로 설정한다.
-
-
-
command parameters의
userContexts필드가 있으면:-
user contexts를 command parameters["
userContexts"]로 유효한 사용자 컨텍스트 가져오기를 시도한 결과로 둔다. -
user contexts의 각 user context에 대해:
-
emulated network conditions가 null이면, user context를 session의 에뮬레이트된 네트워크 조건의 user context network conditions에서 제거한다.
-
그렇지 않으면, session의 에뮬레이트된 네트워크 조건의 user context network conditions[user context]을 emulated network conditions로 설정한다.
-
-
-
command parameters가 "
userContexts"를 포함하지 않고 command parameters가 "context"를 포함하지 않으면, session의 에뮬레이트된 네트워크 조건의 default network conditions를 emulated network conditions로 설정한다. -
네트워크 조건 적용을 한다.
-
데이터 null과 함께 성공을 반환한다.
7.4.2.5. emulation.setScreenSettingsOverride 명령
emulation.setScreenSettingsOverride 명령은 주어진 최상위 traversable 또는 사용자 컨텍스트의 웹에 노출된 화면 영역 및 웹에 노출된 사용 가능한 화면 영역을 에뮬레이트한다.
- 명령 타입
-
emulation.SetScreenSettingsOverride= (method:"emulation.setScreenSettingsOverride",params: emulation.SetScreenSettingsOverrideParameters )emulation.ScreenArea= {width: js-uint,height: js-uint }emulation.SetScreenSettingsOverrideParameters= {screenArea: emulation.ScreenArea / null, ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], } - 반환 타입
-
emulation.SetScreenSettingsOverrideResult= EmptyResult
navigable navigable이 주어졌을 때의 WebDriver BiDi 에뮬레이트된 사용 가능한 화면 영역 단계는 다음과 같다:
-
top-level traversable을 navigable의 최상위 traversable로 둔다.
-
user context를 top-level traversable의 연관된 사용자 컨텍스트로 둔다.
-
screen settings overrides가 top-level traversable를 포함하면, screen settings overrides[top-level traversable]를 반환한다.
-
screen settings overrides가 user context를 포함하면, screen settings overrides[user context]를 반환한다.
-
null을 반환한다
navigable navigable이 주어졌을 때의 WebDriver BiDi 에뮬레이트된 전체 화면 영역 단계는 다음과 같다:
-
top-level traversable을 navigable의 최상위 traversable로 둔다.
-
user context를 top-level traversable의 연관된 사용자 컨텍스트로 둔다.
-
screen settings overrides가 top-level traversable를 포함하면, screen settings overrides[top-level traversable]를 반환한다.
-
screen settings overrides가 user context를 포함하면, screen settings overrides[user context]를 반환한다.
-
null을 반환한다
command parameters로 원격 끝 단계는 다음과 같다:
-
command parameters가 "
userContexts"를 포함하고 command parameters가 "contexts"를 포함하면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
command parameters가 "
userContexts"를 포함하지 않고 command parameters가 "contexts"를 포함하지 않으면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
emulated screen area를 command parameters["
screenArea"]로 둔다. -
emulated screen area가 null이 아니면:
-
navigables를 집합으로 둔다.
-
command parameters의
contexts필드가 있으면:-
navigables를 command parameters["
contexts"]로 id로 유효한 최상위 traversable 가져오기를 시도한 결과로 둔다. -
target을 navigable 화면 설정으로 둔다.
-
navigables의 각 navigable에 대해:
-
데이터 null과 함께 성공을 반환한다.
-
-
그렇지 않으면:
-
command parameters의
userContexts필드가 있다고 단언한다. -
user contexts를 command parameters["
userContexts"]로 유효한 사용자 컨텍스트 가져오기를 시도한 결과로 둔다. -
target을 사용자 컨텍스트 화면 설정으로 둔다.
-
user contexts의 각 user context에 대해:
-
데이터 null과 함께 성공을 반환한다.
-
7.4.2.6. emulation.setScreenOrientationOverride 명령
emulation.setScreenOrientationOverride 명령은 주어진 최상위 traversable 또는 사용자 컨텍스트의 screen orientation을 에뮬레이트한다.
- 명령 타입
-
emulation.SetScreenOrientationOverride= (method:"emulation.setScreenOrientationOverride",params: emulation.SetScreenOrientationOverrideParameters )emulation.ScreenOrientationNatural="portrait"/"landscape"emulation.ScreenOrientationType="portrait-primary"/"portrait-secondary"/"landscape-primary"/"landscape-secondary"emulation.ScreenOrientation= {natural: emulation.ScreenOrientationNatural,type: emulation.ScreenOrientationType }emulation.SetScreenOrientationOverrideParameters= {screenOrientation: emulation.ScreenOrientation / null, ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], } - 반환 타입
-
emulation.SetScreenOrientationOverrideResult= EmptyResult
navigable 및 emulated screen orientation이 주어졌을 때 에뮬레이트된 screen orientation 설정을 하려면:
이 알고리즘을 screen orientation 명세로 옮긴다.
-
emulated screen orientation이 null이면:
-
navigable의 현재 orientation angle을 구현 정의 기본값으로 설정한다.
-
navigable의 현재 orientation type을 구현 정의 기본값으로 설정한다.
-
-
그렇지 않으면:
-
emulated orientation type을 emulated screen orientation["
type"]으로 둔다. -
emulated orientation angle을 screen orientation 값 목록에서 정의된 대로, emulated screen orientation["
natural"] orientations를 가진 화면에 대해 emulated orientation type에 연관된 각도로 둔다. -
현재 orientation angle을 emulated orientation angle로 설정한다.
-
현재 orientation type을 emulated orientation type으로 설정한다.
-
-
navigable의 활성 문서로 screen orientation 변경 단계를 실행한다.
command parameters로 원격 끝 단계는 다음과 같다:
-
구현이 어떤 이유로든 주어진 command parameters로 screen orientations 매개변수를 조정할 수 없으면, 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
-
command parameters가 "
userContexts"를 포함하고 command parameters가 "contexts"를 포함하면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
command parameters가 "
userContexts"를 포함하지 않고 command parameters가 "contexts"를 포함하지 않으면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
emulated screen orientation을 command parameters["
screenOrientation"]로 둔다. -
navigables를 집합으로 둔다.
-
command parameters의
contexts필드가 있으면:-
navigables를 command parameters["
contexts"]로 id로 유효한 최상위 traversable 가져오기를 시도한 결과로 둔다.
-
-
그렇지 않고, command parameters의
userContexts필드가 있으면:-
user contexts를 command parameters["
userContexts"]로 유효한 사용자 컨텍스트 가져오기를 시도한 결과로 둔다. -
user contexts의 각 user context에 대해:
-
emulated screen orientation이 null이면, user context를 screen orientation overrides map에서 제거한다.
-
그렇지 않으면, screen orientation overrides map[user context]을 emulated screen orientation으로 설정한다.
-
각 최상위 traversable 중 그 연관된 사용자 컨텍스트가 user context인 모든 목록의 top-level traversable에 대해:
-
top-level traversable을 navigables에 추가한다.
-
-
-
-
navigables의 각 navigable에 대해:
-
user context를 navigable의 연관된 사용자 컨텍스트로 둔다.
-
emulated screen orientation이 null이고 screen orientation overrides map이 user context를 포함하면, navigable 및 screen orientation overrides map[user context]로 에뮬레이트된 screen orientation 설정을 한다.
-
그렇지 않으면, navigable 및 emulated screen orientation으로 에뮬레이트된 screen orientation 설정을 한다.
-
-
데이터 null과 함께 성공을 반환한다.
7.4.2.7. emulation.setUserAgentOverride 명령
emulation.setUserAgentOverride 명령은 주어진 최상위 traversable, 사용자 컨텍스트 또는 전역의 User-Agent를 수정한다.
- 명령 타입
-
emulation.SetUserAgentOverride= (method:"emulation.setUserAgentOverride",params: emulation.SetUserAgentOverrideParameters )emulation.SetUserAgentOverrideParameters= {userAgent: text / null, ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], } - 반환 타입
-
emulation.SetUserAgentOverrideResult= EmptyResult
-
related navigables를 environment settings로 관련 navigable 가져오기를 수행한 결과로 둔다.
-
related navigables의 각 navigable에 대해:
-
top-level navigable을 navigable의 최상위 traversable로 둔다.
-
user context를 top-level navigable의 연관된 사용자 컨텍스트로 둔다.
-
활성 BiDi 세션 안의 각 session에 대해:
-
session의 에뮬레이트된 user agent의 navigable user agent가 top-level navigable를 포함하면, session의 에뮬레이트된 user agent의 navigable user agent[top-level navigable]를 반환한다.
-
-
활성 BiDi 세션 안의 각 session에 대해:
-
session의 에뮬레이트된 user agent의 사용자 컨텍스트 user agent가 user context를 포함하면, session의 에뮬레이트된 user agent의 사용자 컨텍스트 user agent[user context]를 반환한다.
-
-
-
활성 BiDi 세션 안의 각 session에 대해:
-
default emulated user agent를 session의 에뮬레이트된 user agent의 기본 user agent로 둔다.
-
default emulated user agent가 null이 아니면, default emulated user agent를 반환한다.
-
-
null을 반환한다.
session 및 command parameters가 주어졌을 때 원격 끝 단계는 다음과 같다:
-
command parameters가 "
userContexts"를 포함하고 command parameters가 "contexts"를 포함하면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
emulated user agent를 command parameters["
userAgent"]로 둔다. -
command parameters가 "
contexts"를 포함하면:-
navigables를 command parameters["
contexts"]로 id로 유효한 최상위 traversable 가져오기를 시도한 결과로 둔다. -
navigables의 각 navigable에 대해:
-
emulated user agent가 null이면, navigable을 session의 에뮬레이트된 user agent의 navigable user agent에서 제거한다.
-
그렇지 않으면, session의 에뮬레이트된 user agent의 navigable user agent[navigable]을 emulated user agent로 설정한다.
-
-
데이터 null과 함께 성공을 반환한다.
-
-
command parameters가 "
userContexts"를 포함하면:-
user contexts를 command parameters["
userContexts"]로 유효한 사용자 컨텍스트 가져오기를 시도한 결과로 둔다. -
user contexts의 각 user context에 대해:
-
emulated user agent가 null이면, user context를 session의 에뮬레이트된 user agent의 사용자 컨텍스트 user agent에서 제거한다.
-
그렇지 않으면, session의 에뮬레이트된 user agent의 사용자 컨텍스트 user agent[user context]을 emulated user agent로 설정한다.
-
-
데이터 null과 함께 성공을 반환한다.
-
-
session의 에뮬레이트된 user agent의 기본 user agent를 emulated user agent로 설정한다.
-
데이터 null과 함께 성공을 반환한다.
7.4.2.8. emulation.setScriptingEnabled 명령
emulation.setScriptingEnabled 명령은 웹 페이지에서 JavaScript 비활성화를 에뮬레이트한다.
- 명령 타입
-
emulation.SetScriptingEnabled= (method:"emulation.setScriptingEnabled",params: emulation.SetScriptingEnabledParameters )emulation.SetScriptingEnabledParameters= {enabled: false / null, ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], } - 반환 타입
-
emulation.SetScriptingEnabledResult= EmptyResult
참고: 비활성화된 Javascript의 에뮬레이션만 지원된다.
-
navigable을 settings의 관련 전역 객체의 연관된
Document의 노드 navigable로 둔다. -
top-level traversable을 navigable의 최상위 traversable로 둔다.
-
scripting enabled overrides map이 top-level traversable를 포함하면, scripting enabled overrides map[top-level traversable]를 반환한다
-
user context를 top-level traversable의 연관된 사용자 컨텍스트로 둔다.
-
scripting enabled overrides map이 user context를 포함하면, scripting enabled overrides map[user context]를 반환한다.
-
true를 반환한다.
command parameters로 원격 끝 단계는 다음과 같다:
-
command parameters가 "
userContexts"를 포함하고 command parameters가 "contexts"를 포함하면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
command parameters가 "
userContexts"를 포함하지 않고 command parameters가 "contexts"를 포함하지 않으면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
emulated scripting enabled status를 command parameters["
enabled"]로 둔다. -
command parameters의
contexts필드가 있으면:-
navigables를 command parameters["
contexts"]로 id로 유효한 최상위 traversable 가져오기를 시도한 결과로 둔다. -
navigables의 각 navigable에 대해:
-
emulated scripting enabled status가 null이면, navigable을 scripting enabled overrides map에서 제거한다.
-
그렇지 않으면, scripting enabled overrides map[navigable]을 emulated scripting enabled status로 설정한다.
-
-
-
command parameters의
userContexts필드가 있으면:-
user contexts를 command parameters["
userContexts"]로 유효한 사용자 컨텍스트 가져오기를 시도한 결과로 둔다. -
user contexts의 각 user context에 대해:
-
emulated scripting enabled status가 null이면, user context를 scripting enabled overrides map에서 제거한다.
-
그렇지 않으면 scripting enabled overrides map[user context]을 emulated scripting enabled status로 설정한다.
-
-
-
데이터 null과 함께 성공을 반환한다.
7.4.2.9. emulation.setScrollbarTypeOverride 명령
emulation.setScrollbarTypeOverride 명령은 주어진 최상위 traversable, 사용자 컨텍스트 또는 전역의 scrollbar type을 수정한다.
- 명령 타입
-
emulation.SetScrollbarTypeOverride= (method:"emulation.setScrollbarTypeOverride",params: emulation.SetScrollbarTypeOverrideParameters )emulation.SetScrollbarTypeOverrideParameters= {scrollbarType:"classic"/"overlay"/ null, ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], } - 반환 타입
-
emulation.SetScrollbarTypeOverrideResult= EmptyResult
원격 끝은 scrollbar type 재정의 구성을 가지며, 이는 WebDriver 구성으로서 연관 타입 string을 가진다.
-
scrollbar type override를 navigable에 대한 scrollbar type 재정의 구성의 WebDriver 구성 값 가져오기 결과로 둔다.
-
단언: scrollbar type override는 "
classic", "overlay" 또는 unset이다. -
scrollbar type override가 "
classic"이면, navigable의 활성 문서가 classic scrollbars를 사용하도록 구현 정의 단계를 실행하고 반환한다. -
scrollbar type override가 "
overlay"이면, navigable의 활성 문서가 overlay scrollbars를 사용하도록 구현 정의 단계를 실행하고 반환한다. -
단언: scrollbar type override는 unset이다.
-
navigable의 활성 문서가 구현 정의 기본 scrollbar type을 사용하도록 구현 정의 단계를 실행한다.
command parameters가 주어졌을 때 원격 끝 단계는 다음과 같다:
-
scrollbar type override를 command parameters["
scrollbarType"]로 둔다. -
scrollbar type override가 null이면, scrollbar type override를 unset으로 설정한다.
-
구현이 scrollbar type override 설정을 지원하지 않으면, 오류를 반환하되 오류 코드는 unsupported operation으로 한다.
-
affected navigables를 command parameters에 대해 scrollbar type 재정의 구성 scrollbar type override인 WebDriver 구성 저장을 시도한 결과로 둔다.
-
affected navigables의 각 navigable에 대해:
-
navigable에 대해 scrollbar type 재정의 갱신을 한다.
-
-
데이터 null과 함께 성공을 반환한다.
7.4.2.10. emulation.setTimezoneOverride 명령
emulation.setTimezoneOverride 명령은 주어진 최상위 traversable 또는 사용자 컨텍스트의 timezone을 수정한다.
- 명령 타입
-
emulation.SetTimezoneOverride= (method:"emulation.setTimezoneOverride",params: emulation.SetTimezoneOverrideParameters )emulation.SetTimezoneOverrideParameters= {timezone: text / null, ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], } - 반환 타입
-
emulation.SetTimezoneOverrideResult= EmptyResult
-
emulated timezone을 null로 둔다.
-
realm을 현재 Realm Record로 둔다.
-
environment settings를 그 realm 실행 컨텍스트의 Realm 컴포넌트가 realm인 환경 설정 객체로 둔다.
-
related navigables를 environment settings가 주어졌을 때 관련 navigable 가져오기를 수행한 결과로 둔다.
-
related navigables의 각 navigable에 대해:
-
top-level traversable을 navigable의 최상위 traversable로 둔다.
-
user context를 top-level traversable의 연관된 사용자 컨텍스트로 둔다.
-
timezone overrides map이 top-level traversable를 포함하면, emulated timezone을 timezone overrides map[top-level traversable]로 설정한다.
-
그렇지 않고, timezone overrides map이 user context를 포함하면, emulated timezone을 timezone overrides map[user context]로 설정한다.
-
-
emulated timezone이 null이 아니면, emulated timezone을 반환한다.
-
SystemTimeZoneIdentifier 명세의 요구사항에 따른 구현 정의 단계의 결과를 반환한다.
command parameters로 원격 끝 단계는 다음과 같다:
-
command parameters가 "
userContexts"를 포함하고 command parameters가 "contexts"를 포함하면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
command parameters가 "
userContexts"를 포함하지 않고 command parameters가 "contexts"를 포함하지 않으면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
emulated timezone을 command parameters["
timezone"]로 둔다. -
emulated timezone이 null이 아니고 IsTimeZoneOffsetString(emulated timezone)가 false를 반환하고 AvailableNamedTimeZoneIdentifiers가 emulated timezone을 포함하지 않으면, 오류를 반환하되 오류 코드는 invalid argument로 한다.
-
navigables를 집합으로 둔다.
-
command parameters의
contexts필드가 있으면:-
navigables를 command parameters["
contexts"]로 id로 유효한 최상위 traversable 가져오기를 시도한 결과로 둔다.
-
-
그렇지 않으면:
-
command parameters의
userContexts필드가 있다고 단언한다. -
user contexts를 command parameters["
userContexts"]로 유효한 사용자 컨텍스트 가져오기를 시도한 결과로 둔다. -
user contexts의 각 user context에 대해:
-
emulated timezone이 null이면, user context를 timezone overrides map에서 제거한다.
-
그렇지 않으면, timezone overrides map[user context]을 emulated timezone로 설정한다.
-
각 최상위 traversable 중 그 연관된 사용자 컨텍스트가 user context인 모든 목록의 top-level traversable에 대해:
-
top-level traversable을 navigables에 추가한다.
-
-
-
-
navigables의 각 navigable에 대해:
-
emulated timezone이 null이면, navigable을 timezone overrides map에서 제거한다.
-
그렇지 않으면, timezone overrides map[navigable]을 emulated timezone로 설정한다.
-
-
데이터 null과 함께 성공을 반환한다.
7.4.2.11. emulation.setTouchOverride 명령
emulation.setTouchOverride 명령은 웹 페이지에서 touch 입력 활성화를 에뮬레이트한다.
- 명령 타입
-
emulation.SetTouchOverride= (method:"emulation.setTouchOverride",params: emulation.SetTouchOverrideParameters )emulation.SetTouchOverrideParameters= {maxTouchPoints: (js-uint .ge 1) / null, ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], } - 반환 타입
-
emulation.SetTouchOverrideResult= EmptyResult
-
related navigables를 environment settings로 관련 navigable 가져오기를 수행한 결과로 둔다.
-
related navigables의 각 navigable에 대해:
-
top-level navigable을 navigable의 최상위 traversable로 둔다.
-
user context를 top-level navigable의 연관된 사용자 컨텍스트로 둔다.
-
활성 BiDi 세션 안의 각 session에 대해:
-
session의 에뮬레이트된 maxTouchPoints의 navigables가 top-level navigable를 포함하면, session의 에뮬레이트된 maxTouchPoints의 navigables[top-level navigable]를 반환한다.
-
-
활성 BiDi 세션 안의 각 session에 대해:
-
session의 에뮬레이트된 maxTouchPoints의 user contexts가 user context를 포함하면, session의 에뮬레이트된 maxTouchPoints의 user contexts[user context]를 반환한다.
-
-
-
활성 BiDi 세션 안의 각 session에 대해:
-
emulated maxTouchPoints를 session의 에뮬레이트된 maxTouchPoints의 default로 둔다.
-
emulated maxTouchPoints가 null이 아니면, emulated maxTouchPoints를 반환한다.
-
-
null을 반환한다.
session 및 command parameters로 원격 끝 단계는 다음과 같다:
참고: 레거시 레거시 touch event API 노출이 있으며, 이는 일부 기존 웹 콘텐츠에서 user agent가 touch가 활성화된 "mobile" 장치라는 신호로 여전히 사용될 수 있다. API가 레거시이더라도, user agent는 레거시 touch event API 노출에서 에뮬레이트된 maxTouchPoints 상태를 존중하기 위해 구현 정의 단계를 실행할 수 있다.
-
command parameters가 "
userContexts"를 포함하고 command parameters가 "contexts"를 포함하면, 오류를 반환하되 오류 코드는 invalid argument로 한다. -
maxTouchPoints를 command parameters["
maxTouchPoints"]로 둔다. -
command parameters의
contexts필드가 있으면:-
navigables를 command parameters["
contexts"]로 id로 유효한 최상위 traversable 가져오기를 시도한 결과로 둔다. -
navigables의 각 navigable에 대해:
-
maxTouchPoints가 null이면, navigable을 session의 에뮬레이트된 maxTouchPoints의 navigables에서 제거한다.
-
그렇지 않으면, session의 에뮬레이트된 maxTouchPoints의 navigables[navigable]을 maxTouchPoints로 설정한다.
-
-
데이터 null과 함께 성공을 반환한다.
-
-
command parameters의
userContexts필드가 있으면:-
user contexts를 command parameters["
userContexts"]로 유효한 사용자 컨텍스트 가져오기를 시도한 결과로 둔다. -
user contexts의 각 user context에 대해:
-
maxTouchPoints가 null이면, user context를 session의 에뮬레이트된 maxTouchPoints의 user contexts에서 제거한다.
-
그렇지 않으면 session의 에뮬레이트된 maxTouchPoints의 user contexts[user context]를 maxTouchPoints로 설정한다.
-
-
데이터 null과 함께 성공을 반환한다.
-
-
session의 에뮬레이트된 maxTouchPoints의 default를 maxTouchPoints로 설정한다.
-
데이터 null과 함께 성공을 반환한다.
7.5. network 모듈
network 모듈은 네트워크 요청과 관련된 명령 및 이벤트를 포함한다.
7.5.1. 정의
NetworkCommand = (
network.AddDataCollector //
network.AddIntercept //
network.ContinueRequest //
network.ContinueResponse //
network.ContinueWithAuth //
network.DisownData //
network.FailRequest //
network.GetData //
network.ProvideResponse //
network.RemoveDataCollector //
network.RemoveIntercept //
network.SetCacheBehavior //
network.SetExtraHeaders
)
NetworkResult= ( network.AddDataCollectorResult / network.AddInterceptResult / network.ContinueRequestResult / network.ContinueResponseResult / network.ContinueWithAuthResult / network.DisownDataResult / network.FailRequestResult / network.GetDataResult / network.ProvideResponseResult / network.RemoveDataCollectorResult / network.RemoveInterceptResult / network.SetCacheBehaviorResult / network.SetExtraHeadersResult )NetworkEvent= ( network.AuthRequired // network.BeforeRequestSent // network.FetchError // network.ResponseCompleted // network.ResponseStarted )
원격 끝은 before request sent map을 가지며, 이는 처음에는
빈 맵이다. 이는 이미 network.beforeRequestSent 이벤트가 전송된 네트워크 이벤트를
추적하는 데 사용된다.
원격 끝은 기본 캐시 동작을 가지며, 이는 문자열이다. 이는
처음에는 "default"이다.
원격 끝은 navigable 캐시 동작 맵을 가지며, 이는 캐시 동작을 나타내는 문자열과 최상위 traversable 사이의 weak map이다. 이는 처음에는 비어 있다.
BiDi 세션은 extra headers를 가지며, 이는 구조체로서 기본 헤더라는 이름의 항목을 가지며, 이는 헤더 목록이고(처음에는 빈 헤더 목록으로 설정됨), 사용자 컨텍스트 헤더라는 이름의 항목을 가지며, 이는 사용자 컨텍스트와 헤더 목록 사이의 weak map이고, navigable 헤더라는 이름의 항목을 가지며, 이는 navigable과 헤더 목록 사이의 weak map이다.
7.5.2. 네트워크 데이터 수집
네트워크 데이터는 다음을 가지는 구조체이다:
-
bytes라는 이름의 항목. 이는
network.BytesValue또는 null이다, -
collectors라는 이름의 항목. 이는
network.Collector의 목록이다, -
pending이라는 이름의 항목. 이는 boolean이다,
-
request라는 이름의 항목. 이는 request id이다,
-
size라는 이름의 항목. 이는 js-uint 또는 null이다,
-
type이라는 이름의 항목. 이는
network.DataType이다.
collector는 다음을 가지는 구조체이다:
-
max encoded item size라는 이름의 항목. 이는 js-uint이다;
-
contexts라는 이름의 항목. 이는 목록으로서 navigable id의 목록이다;
-
data types라는 이름의 항목. 이는 목록으로서
network.DataType의 목록이다; -
collector라는 이름의 항목. 이는
network.Collector이다; -
collector type이라는 이름의 항목. 이는
network.CollectorType이다; -
user contexts라는 이름의 항목. 이는 목록으로서
browser.UserContext의 목록이다.
참고: max encoded item size는 항목(응답 또는 요청)별 제한을 정의하며, 특정 collector가 수집하는 크기를 제한하지 않는다. 수집된 모든 리소스의 총 크기는 max total collected size에 의해 제한된다.
BiDi 세션은 network collectors를
가지며, 이는
network.Collector와
collector 사이의
맵이다. 이는 처음에는 비어 있다.
원격 끝은 수집된 네트워크 데이터를 가지며, 이는 네트워크 데이터의 목록이다. 이는 처음에는 비어 있다.
원격 끝은 max total collected size를 가지며, 이는 수집된 네트워크 데이터 안의 네트워크 데이터를 수집하기 위해 할당된 크기를 나타내는 js-uint이다. 그 값은 구현 정의이다.
참고: 이는 구현이 리소스 사용량 제한을 설정할 수 있게 한다. 제한은 사용자가 웹 페이지에서 사용되는 이미지와 글꼴처럼, 브라우저가 완전히 디코딩하고 처리하는 데이터를 수집할 수 있다고 의존할 수 있을 만큼 충분히 클 것으로 기대된다.
-
collector의 contexts가 비어 있지 않으면:
-
collector의 contexts가 navigable의 navigable id를 포함하면 true를 반환한다.
-
그렇지 않으면, false를 반환한다.
-
-
collector의 user contexts가 비어 있지 않으면:
-
user context를 navigable의 연관된 사용자 컨텍스트로 둔다.
-
collector의 user contexts가 user context의 사용자 컨텍스트 id를 포함하면 true를 반환한다.
-
그렇지 않으면, false를 반환한다.
-
-
true를 반환한다.
-
request의 body가 null이면, 반환한다.
-
활성 BiDi 세션 안의 각 session에 대해:
-
session의 network collectors가 비어 있지 않으면:
-
collected data를 네트워크 데이터로 두고, bytes는 null로 설정하고, 복제된 body는 request의 body의 clone으로 설정하고, collectors는 빈 목록으로 설정하고, pending은 true로 설정하고, request는 request의 request id로 설정하고, size는 null로 설정하고, type은 "request"로 설정한다.
-
collected data를 수집된 네트워크 데이터에 추가한다.
-
반환한다.
-
-
-
response body가 null이면, 반환한다.
-
활성 BiDi 세션 안의 각 session에 대해:
-
session의 network collectors가 비어 있지 않으면:
-
collected data를 네트워크 데이터로 두고, bytes는 null로 설정하고, 복제된 body는 response body의 clone으로 설정하고, collectors는 빈 목록으로 설정하고, pending은 true로 설정하고, request는 request의 request id로 설정하고, size는 null로 설정하고, type은 "response"로 설정한다.
-
collected data를 수집된 네트워크 데이터에 추가한다.
-
반환한다.
-
-
-
수집된 네트워크 데이터의 각 collected data에 대해:
-
null을 반환한다.
-
collected data를 request의 request id 및 "response"로 수집된 데이터 가져오기를 수행한 결과로 둔다.
-
collected data가 null이면, 반환한다.
-
collected data의 pending을 false로 설정한다.
-
"
network data collected" 및 (request의 request id, "response")로 재개한다.
-
collected data를 request의 request id 및 "request"로 수집된 데이터 가져오기를 수행한 결과로 둔다.
-
collected data가 null이면, 반환한다.
참고: 이는 요청이 생성될 때 collector가 설정되어 있지 않고 WebDriver BiDi 네트워크 request body 복제가 대응하는 body를 복제하지 않은 경우 발생할 수 있다. 또는 처음부터 body가 null인 경우에도 발생할 수 있다.
-
request, collected data, null 및 "request"로 네트워크 데이터 수집 여부 처리를 한다.
-
response의 status가 redirect status이면, 반환한다.
참고: 리디렉션의 경우 최종 응답 body만 저장된다.
-
collected data를 request의 request id 및 "response"로 수집된 데이터 가져오기를 수행한 결과로 둔다.
-
collected data가 null이면, 반환한다.
참고: 이는 응답이 생성될 때 collector가 설정되어 있지 않고 WebDriver BiDi 네트워크 response body 복제가 대응하는 body를 복제하지 않은 경우 발생할 수 있다. 또는 처음부터 body가 null인 경우에도 발생할 수 있다.
-
size를 response의 response body info의 encoded size로 둔다.
참고: fetch 스트림에서 검색된 bytes가 디코딩된 데이터에 해당한다는 사실과, 크기 제한을 계산하기 위해 인코딩된(네트워크) 크기가 사용된다는 사실 사이에는 불일치가 있다. 구현은 getData에서 클라이언트에 반환되는 데이터가 디코딩된 데이터와 동일하기만 하다면, 디코딩된 데이터를 저장하는 것보다 더 적은 크기를 사용하는 저장 모델을 사용할 수 있다. 저장소와 성능 사이의 잠재적 절충은 구현에 달려 있다.
-
request, collected data, size 및 "response"로 네트워크 데이터 수집 여부 처리를 한다.
-
collected data의 pending을 false로 설정한다.
-
navigable을 request로 request에 대한 navigable 가져오기를 수행한 결과로 둔다.
-
navigable이 null이면:
-
collected data를 수집된 네트워크 데이터에서 제거한다.
-
"
network data collected" 및 (request의 request id, data type)로 재개한다. -
반환한다.
이는 navigable과 관련되지 않은 데이터 수집을 방지한다. collector 구성을 확인하려면 여전히 navigable을 검색해야 하지만, 여기서 null도 허용할 수 있다.
-
-
top-level navigable을 navigable의 최상위 traversable로 둔다.
-
collectors를 빈 목록으로 둔다.
-
활성 BiDi 세션 안의 각 session에 대해:
-
session의 network collectors 안의 각 collector에 대해:
-
collector의 data types가 data type을 포함하고, collector 및 top-level navigable로 navigable에 대해 collector 일치를 수행한 결과가 true이면:
-
collector를 collectors에 추가한다.
-
-
-
-
collectors가 비어 있으면:
-
collected data를 수집된 네트워크 데이터에서 제거한다.
-
"
network data collected" 및 (request의 request id, data type)로 재개한다. -
반환한다.
-
-
bytes를 null로 둔다.
-
nullOrBytes가 주어졌을 때의 processBody를 이 단계로 둔다:
-
nullOrBytes가 null이 아니면:
-
bytes를 nullOrBytes로 프로토콜 bytes 직렬화를 수행한 결과로 설정한다.
-
size가 null이면, size를 bytes의 길이로 설정한다.
-
-
-
processBodyError를 이 단계로 둔다: 아무것도 하지 않는다.
-
processBody 및 processBodyError가 주어졌을 때 collected data의 복제된 body를 완전히 읽는다.
-
bytes가 null이 아니면:
-
collectors 안의 각 collector에 대해:
-
size가 collector의 max encoded item size보다 작거나 같으면, collector의 collector를 collected data의 collectors에 추가한다.
-
-
collected data의 collectors가 비어 있지 않으면:
-
size가 주어졌을 때 데이터 기록을 위한 크기 할당을 한다.
-
collected data의 bytes를 bytes로 설정한다.
-
collected data의 size를 size로 설정한다.
-
-
그렇지 않으면, collected data를 수집된 네트워크 데이터에서 제거한다.
-
-
"
network data collected" 및 (request의 request id, data type)로 재개한다.
-
available size를 max total collected size로 둔다.
-
already collected data를 빈 목록으로 둔다.
-
수집된 네트워크 데이터 안의 각 collected data에 대해:
-
size가 available size보다 크면:
-
collected data의 collectors가 collector id를 포함하면:
-
collector id를 collected data의 collectors에서 제거한다.
-
collected data의 collectors가 비어 있으면:
-
collected data를 수집된 네트워크 데이터에서 제거한다.
-
-
7.5.3. 네트워크 인터셉트
network intercept는 원격 끝이 네트워크 요청과 응답을 인터셉트하고 수정할 수 있게 하는 메커니즘이다.
BiDi 세션은 intercept map을 가지며, 이는
활성 network intercept의 속성을 정의하는 필드 url patterns,
phases, contexts를 가진 구조체와
intercept id 사이의
맵이다.
이는 처음에는 비어 있다.
BiDi 세션은 blocked request
map을 가지며, 이는
활발하게 차단되고 있는 요청을 추적하는 데 사용된다. 이는 request id와,
필드 request, phase,
response를 가진 구조체 사이의
맵이다. 이는 처음에는 비어 있다.
session, event, request, 및 navigable id가 주어졌을 때 network intercept 가져오기를 하려면:
-
session intercepts를 session의 intercept map으로 둔다.
-
intercepts를 빈 목록으로 둔다.
-
첫 번째로 일치하는 조건 아래의 단계를 실행한다:
- event가 "
network.beforeRequestSent"인 경우 - phase를 "
beforeRequestSent"로 설정한다. - event가 "
network.responseStarted"인 경우 - phase를 "
responseStarted"로 설정한다. - event가 "
network.authRequired"인 경우 - phase를 "
authRequired"로 설정한다. - event가 "
network.responseCompleted"인 경우 - intercepts를 반환한다.
- event가 "
-
session intercepts의 각 intercept id → intercept에 대해:
-
intercept의
contexts가 null이 아니면:-
intercept의
contexts가 navigable id를 포함하지 않으면:-
계속한다.
-
-
-
intercept의
phases가 phase를 포함하면:-
url patterns를 intercept의
url patterns로 둔다. -
url patterns가 비어 있으면:
-
intercept id를 intercepts에 추가한다.
-
계속한다.
-
-
url patterns 안의 각 url pattern에 대해:
-
url pattern 및 url로 URL pattern 일치를 수행한 결과가 true이면:
-
intercept id를 intercepts에 추가한다.
-
중단한다.
-
-
-
-
-
intercepts를 반환한다.
-
blocked requests를 session의 blocked request map으로 둔다.
-
request id를 command parameters["
request"]로 둔다. -
blocked requests가 request id를 포함하지 않으면 오류 코드 no such request인 오류를 반환한다.
-
(request, phase, response)를 blocked requests[request id]로 둔다.
-
phase가 "
beforeRequestSent"이고 command가 "continueResponse"이면, 오류 코드 "invalid argument"인 오류를 반환한다.TODO: 다른 오류를 고려한다
-
response가 null이면:
-
단언: phase는 "
beforeRequestSent"이다. -
response를 새 response로 설정한다.
-
-
command parameters가 "
statusCode"를 포함하면:-
responses의 status를 command parameters["
statusCode"]로 설정한다.
-
-
command parameters가 "
reasonPhrase"를 포함하면:-
responses의 status message를 command parameters["
reasonPhrase"]로 UTF-8 encode를 수행한 결과로 설정한다.
-
-
command parameters가 "
headers"를 포함하면:-
headers를 command parameters["
headers"]로 headers list 생성을 시도한 결과로 둔다. -
response의 header list를 headers로 설정한다.
-
-
command parameters가 "
cookies"를 포함하면:-
command parameters가 "
headers"를 포함하면, headers를 response의 header list로 둔다.그렇지 않으면:
-
headers를 빈 header list로 둔다.
-
response의 headers list 안의 각 header에 대해:
-
name을 header의 name으로 둔다.
-
name을 byte-lowercase한 결과가 `
set-cookie`가 아니면:-
header를 headers에 추가한다
-
-
-
-
command parameters["
cookies"] 안의 각 cookie에 대해:-
header value를 cookie로 set-cookie header 직렬화를 수행한 결과로 둔다.
-
(`
Set-Cookie`, header value)를 headers에 추가한다. -
response의 header list를 headers로 설정한다.
-
-
-
command parameters가 "
credentials"를 포함하면:-
credentials를 command parameters["
credentials"]로 둔다. -
단언: credentials["
type"]은 "password"이다. -
response의 authentication credentials를 (credentials["
username"], credentials["password"])로 설정한다
-
-
response를 반환한다
7.5.4. 타입
7.5.4.1. network.AuthChallenge 타입
network.AuthChallenge= {scheme: text,realm: text, }
response가 주어졌을 때 challenges 추출을 하려면:
-
response의 status가 401이면 header name을 `
WWW-Authenticate`로 둔다. 그렇지 않고 response의 status가 407이면 header name을 `Proxy-Authenticate`로 둔다. 그렇지 않으면 null을 반환한다. -
challenges를 새 목록으로 둔다.
-
response의 header list 안의 각 (name, value)에 대해:
Fetch에서처럼, 이것이 여러 header, 파싱 문제 등을 처리하는 올바른 방식인지 명확하지 않다.
-
name이 header name에 대해 byte-case-insensitive 일치이면:
-
header challenges를 value를 파싱하여, 각각 scheme과 매개변수 목록으로 이루어진 challenges의 목록으로 만든 결과로 둔다. 각 매개변수는 [RFC9110]의 규칙에 따라 튜플 (name, value)이다.
-
header challenges 안의 각 header challenge에 대해:
-
scheme을 header challenge의 scheme으로 둔다.
-
realm을 빈 문자열로 둔다.
-
header challenge의 parameters 안의 각 (param name, param value)에 대해:
-
param name이 `
realm`과 같으면 realm을 param value를 UTF-8 decode한 결과로 둔다.
-
-
challenge를
network.AuthChallengeproduction과 일치하는 새 맵으로 두고,scheme필드는 scheme으로 설정하고realm필드는 realm으로 설정한다.
-
-
challenge를 challenges에 추가한다.
-
-
-
challenges를 반환한다.
7.5.4.2. network.AuthCredentials 타입
network.AuthCredentials= {type:"password",username: text,password: text, }
network.AuthCredentials 타입은 authorization credentials 요청에 대한 응답을 나타낸다.
7.5.4.3. network.BaseParameters 타입
network.BaseParameters= (context: browsingContext.BrowsingContext / null,isBlocked: bool,navigation: browsingContext.Navigation / null,redirectCount: js-uint,request: network.RequestData,timestamp: js-uint, ?userContext: browser.UserContext / null, ?intercepts: [+network.Intercept] )
network.BaseParameters 타입은 모든 네트워크 이벤트에 공통인 데이터를 나타내는 추상 타입이다.
context에 더해 요청을 시작한 document 노드의 `sharedId`를 포함하는 것을 고려한다.
-
request data를 request로 request data 가져오기를 수행한 결과로 둔다.
-
navigation을 request의 navigation id로 둔다.
-
navigable id를 null로 둔다.
-
top-level navigable id를 null로 둔다.
-
user context id를 null로 둔다.
-
-
environment settings를 request의 client로 둔다.
-
그 활성 window가 environment settings의 전역 객체인 navigable이 있으면, navigable id를 그 navigable의 navigable id로 설정하고, top-level navigable id를 그 navigable의 최상위 traversable의 navigable id로 설정하고, user context id를 그 navigable의 연관된 사용자 컨텍스트의 사용자 컨텍스트 id로 설정한다.
-
-
intercepts를 session, event, request, 및 top-level navigable id로 network intercept 가져오기를 수행한 결과로 둔다.
-
redirect count를 request의 redirect count로 둔다.
-
timestamp를 UTC에서 현재 날짜와 시간을 나타내는 time value로 둔다.
-
intercepts가 비어 있지 않으면 is blocked를 true로 두고, 그렇지 않으면 is blocked를 false로 둔다.
-
params를
network.BaseParametersproduction과 일치하는 맵으로 두고,request필드는 request data로 설정하고, navigation 필드는navigation으로 설정하고,context필드는 navigable id로 설정하고,userContext필드는 user context id로 설정하고,timestamp필드는 timestamp로 설정하고,redirectCount필드는 redirect count로 설정하고,isBlocked필드는 is blocked로 설정하고,intercepts필드는 is blocked가 true이면 intercepts로 설정하거나, 그렇지 않으면 생략한다. -
params를 반환한다
7.5.4.4. network.BytesValue 타입
network.BytesValue= network.StringValue / network.Base64Value;network.StringValue= {type:"string",value: text, }network.Base64Value= {type:"base64",value: text, }
network.BytesValue
타입은 네트워크를 통해 전송되는 바이너리 데이터를 나타낸다.
유효한 UTF-8은 network.StringValue
타입으로 표현되고, 그 외의 데이터는 Base64로 인코딩된 형식인
network.Base64Value로 표현된다.
참고: 이는
network.BytesValue로
인코딩된 bytes를 받아
byte sequence를 반환한다.
-
protocol bytes가
network.StringValueproduction과 일치하면, bytes를 protocol bytes["value"]를 UTF-8 encode한 결과로 둔다. -
그렇지 않고 protocol bytes가
network.Base64Valueproduction과 일치하면, bytes를 protocol bytes["value"]를 forgiving-base64 decode한 결과로 둔다. -
bytes를 반환한다.
참고: 이는 byte sequence를
받아
network.BytesValue를
반환한다.
-
text를 bytes를 BOM 없이 UTF-8 decode하거나 실패한 결과로 둔다.
-
text가 failure이면,
network.Base64Valueproduction과 일치하는 맵을 반환하되, value는 bytes를 forgiving-base64 encode한 결과로 설정한다. -
network.StringValueproduction과 일치하는 맵을 반환하되, value는 text로 설정한다.
7.5.4.5. network.Collector 타입
network.Collector = text
network.Collector
타입은 collector의 id를
나타낸다.
7.5.4.6. network.CollectorType 타입
network.CollectorType="blob"
참고: 향후에는 주어진 collector가 수집한 데이터를 스트림을 통해 읽고자 하는 클라이언트를 위해 "stream" collector 타입도 지원할 수 있다.
network.CollectorType
타입은 추가될 수 있는 데이터 collector의 서로 다른 타입을 나타낸다.
7.5.4.7. network.Cookie 타입
network.SameSite="strict"/"lax"/"none"/"default"network.Cookie= {name: text,value: network.BytesValue,domain: text,path: text,size: js-uint,httpOnly: bool,secure: bool,sameSite: network.SameSite, ?expiry: js-uint, Extensible, }
network.Cookie 타입은 쿠키를 나타낸다.
-
name을 stored cookie의 name field로 UTF-8 decode를 수행한 결과로 둔다.
-
value를 stored cookie의 value로 프로토콜 bytes 직렬화를 수행한 결과로 둔다.
-
domain을 stored cookie의 domain field로 둔다.
-
path를 stored cookie의 path field로 둔다.
-
expiry를 stored cookie의 expiry-time field를 unix timestamp로 나타낸 값으로 두되, 설정되어 있지 않으면 null로 둔다.
-
size를 stored cookie가
Cookieheader에서 표현되는 방식대로 직렬화한 결과의 byte length로 둔다. -
stored cookie의 http-only-flag가 true이면 http only를 true로 두고, 그렇지 않으면 false로 둔다.
-
stored cookie의 secure-only-flag가 true이면 secure를 true로 두고, 그렇지 않으면 false로 둔다.
-
stored cookie의 same-site-flag가 "
None"이면 same site를 "none"으로 두고, "Lax"이면 "lax"로, "Strict"이면 "strict"로, 또는 "Default"이면 "default"로 둔다 -
network.Cookieproduction과 일치하는 맵을 반환하되,name필드는 name으로 설정하고,value필드는 value로 설정하고,domain필드는 domain으로 설정하고,path필드는 path로 설정하고,expiry필드는 expiry가 null이 아니면 expiry로 설정하거나 그렇지 않으면 생략하고,size필드는 size로 설정하고,httpOnly필드는 http only로 설정하고,secure필드는 secure로 설정하고,sameSite필드는 same site로 설정한다.
7.5.4.8. network.CookieHeader 타입
network.CookieHeader= {name: text,value: network.BytesValue, }
network.CookieHeader 타입은 Cookie request header 안에 있는 쿠키 데이터의
하위 집합을 나타낸다.
-
name을 protocol cookie["
name"]를 UTF-8 encode한 결과로 둔다. -
value를 protocol cookie["
value"]로 프로토콜 bytes 역직렬화를 수행한 결과로 둔다. -
header value를 name, `
=`, 및 value를 연결하여 형성된 byte sequence로 둔다 -
header value를 반환한다.
7.5.4.9. network.DataType 타입
network.DataType="request"/"response"
network.DataType
타입은 수집될 수 있는 서로 다른 네트워크 데이터 타입을 나타낸다.
7.5.4.10. network.FetchTimingInfo 타입
network.FetchTimingInfo= {timeOrigin: float,requestTime: float,redirectStart: float,redirectEnd: float,fetchStart: float,dnsStart: float,dnsEnd: float,connectStart: float,connectEnd: float,tlsStart: float,requestStart: float,responseStart: float,responseEnd: float, }
network.FetchTimingInfo 타입은 request의
client의 time origin에 상대적인,
요청의 각 부분의 시간을 나타낸다.
-
global을 request의 client로 둔다.
-
global이 null이면, 모든 필드가 0으로 설정된
network.FetchTimingInfoproduction과 일치하는 맵을 반환한다. -
time origin을 global로 time origin timestamp 가져오기를 수행한 결과로 둔다.
-
timings를 request의 fetch timing info로 둔다.
-
connection timing을 timings의 final connection timing info가 null이 아니면 그 값으로 두고, 그렇지 않으면 새 connection timing info로 둔다.
-
request time을 timings의 start time과 global이 주어졌을 때 fetch timestamp 변환을 수행한 결과로 둔다.
-
redirect start를 timings의 redirect start time과 global이 주어졌을 때 fetch timestamp 변환을 수행한 결과로 둔다.
-
redirect end를 timings의 redirect end time과 global이 주어졌을 때 fetch timestamp 변환을 수행한 결과로 둔다.
-
fetch start를 timings의 post-redirect start time과 global이 주어졌을 때 fetch timestamp 변환을 수행한 결과로 둔다.
-
DNS start를 connection timing의 domain lookup start time과 global이 주어졌을 때 fetch timestamp 변환을 수행한 결과로 둔다.
-
DNS end를 connection timing의 domain lookup end time과 global이 주어졌을 때 fetch timestamp 변환을 수행한 결과로 둔다.
-
TLS start를 connection timing의 secure connection start time과 global이 주어졌을 때 fetch timestamp 변환을 수행한 결과로 둔다.
-
connect start를 connection timing의 connection start time과 global이 주어졌을 때 fetch timestamp 변환을 수행한 결과로 둔다.
-
connect end를 connection timing의 connection end time과 global이 주어졌을 때 fetch timestamp 변환을 수행한 결과로 둔다.
-
request start를 timings의 final network-request start time과 global이 주어졌을 때 fetch timestamp 변환을 수행한 결과로 둔다.
-
response start를 timings의 final network-response start time과 global이 주어졌을 때 fetch timestamp 변환을 수행한 결과로 둔다.
-
response end를 timings의 end time과 global이 주어졌을 때 fetch timestamp 변환을 수행한 결과로 둔다.
-
network.FetchTimingInfoproduction과 일치하는 맵을 반환하되,timeOrigin필드는 time origin으로 설정하고,requestTime필드는 request time으로 설정하고,redirectStart필드는 redirect start로 설정하고,redirectEnd필드는 redirect end로 설정하고,fetchStart필드는 fetch start로 설정하고,dnsStart필드는 DNS start로 설정하고,dnsEnd필드는 DNS end로 설정하고,connectStart필드는 connect start로 설정하고,connectEnd필드는 connect end로 설정하고,tlsStart필드는 TLS start로 설정하고,requestStart필드는 request start로 설정하고,responseStart필드는 response start로 설정하고,responseEnd필드는 response end로 설정한다.
TODO: service worker 필드를 추가한다
7.5.4.11. network.Header 타입
network.Header= {name: text,value: network.BytesValue, }
network.Header 타입은 단일 request header를 나타낸다.
-
name을 name bytes로 UTF-8 decode를 수행한 결과로 둔다.
단언: header 이름은 ASCII 전용으로 제한되므로 이는 실패할 수 없다.
-
value를 value bytes로 프로토콜 bytes 직렬화를 수행한 결과로 둔다.
-
network.Headerproduction과 일치하는 맵을 반환하되,name필드는 name으로 설정하고,value필드는 value로 설정한다.
-
name을 protocol header["
name"]를 UTF-8 encode한 결과로 둔다. -
value를 protocol header["
value"]로 프로토콜 bytes 역직렬화를 수행한 결과로 둔다. -
header (name, value)를 반환한다.
-
headers를 빈 header list로 둔다.
-
protocol headers 안의 각 header에 대해:
-
deserialized header를 header로 header 역직렬화를 수행한 결과로 둔다.
-
deserialized header의 name이 field-name token production과 일치하지 않으면, "
invalid argument"인 오류 코드를 가진 오류를 반환한다. -
deserialized header의 value가 header value production과 일치하지 않으면, "
invalid argument"인 오류 코드를 가진 오류를 반환한다. -
deserialized header를 headers에 추가한다.
-
-
데이터 headers와 함께 성공을 반환한다
7.5.4.12. network.Initiator 타입
network.Initiator= { ?columnNumber: js-uint, ?lineNumber: js-uint, ?request: network.Request, ?stackTrace: script.StackTrace, ?type:"parser"/"script"/"preflight"/"other"}
network.Initiator 타입은 네트워크 요청의 출처를 나타낸다.
참고: type 필드는 하위 호환성을 위해
정의에 포함되어 있지만, 더 이상 initiator 가져오기 단계에서 설정되지 않으며, 이 명세의
향후 개정에서 제거될 것이다. 그 사용은
network.RequestData의 initiatorType 및 destination으로
대체될 것으로 예상된다.
참고: request 필드는 하위 호환성을 위해
정의에 포함되어 있지만, 더 이상 initiator 가져오기 단계에서 설정되지 않으며, 이 명세의
향후 개정에서 제거될 것이다.
network.Initiator는 동일한 request id도 포함하는
network.BeforeRequestSentParameters에 포함되어 있으므로,
이 정보는 중복된다. § 7.5.4.3 network.BaseParameters 타입을 보라.
-
request의 initiator type이 "
fetch" 또는 "xmlhttprequest"이면:-
stack trace를 current stack trace로 둔다.
-
stack trace의 크기가 1 이상이면 line number를 stack trace[0] 안의
lineNumber필드 값으로 두고, column number를 stack trace[0] 안의columnNumber필드 값으로 둔다. 그렇지 않으면 line number와 column number를 0으로 둔다.
그렇지 않으면, stack trace, column number, 및 line number를 모두 null로 둔다.
TODO: Chrome은 parser-inserted 리소스에 대해 현재 parser 위치를 column number / line number로 포함한다.
-
-
network.Initiatorproduction과 일치하는 맵을 반환하되,columnNumber필드는 column number가 null이 아니면 그 값으로 설정하거나 그렇지 않으면 생략하고,lineNumber필드는 line number가 null이 아니면 그 값으로 설정하거나 그렇지 않으면 생략하고,stackTrace필드는 stack trace가 null이 아니면 그 값으로 설정하거나 그렇지 않으면 생략한다.
7.5.4.13. network.Intercept 타입
network.Intercept = text
network.Intercept 타입은 network intercept의 id를 나타낸다.
7.5.4.14. network.Request 타입
network.Request = text;
각 네트워크 요청은 연관된 request id를 가지며, 이는 해당 요청을 고유하게 식별하는 문자열이다. 리디렉션으로 인해 생기는 요청의 식별자는 그것을 시작한 요청의 식별자와 일치한다.
7.5.4.15. network.RequestData 타입
network.RequestData= {request: network.Request,url: text,method: text,headers: [*network.Header],cookies: [*network.Cookie],headersSize: js-uint,bodySize: js-uint / null,destination: text,initiatorType: text / null,timings: network.FetchTimingInfo, }
network.RequestData 타입은 진행 중인 네트워크 요청을 나타낸다.
request가 주어졌을 때 request data 가져오기를 하려면:
-
request id를 request의 request id로 둔다.
-
method를 request의 method로 둔다.
-
body size를 null로 둔다.
-
body를 request의 body로 둔다.
-
body가 byte sequence이면, body size를 그 sequence의 length로 설정한다. 그렇지 않고 body가 body이면 body size를 그 body의 length로 설정한다.
-
headers size를 request의 headers list가 [HTTP11]에서 요구하는 대로 직렬화되었을 때의 byte 크기로 둔다.
참고: header 압축을 허용하는 프로토콜의 경우, 이는 네트워크를 통해 전송된 headers의 압축된 크기이다.
-
headers를 빈 목록으로 둔다.
-
cookies를 빈 목록으로 둔다.
-
request의 headers list 안의 각 (name, value)에 대해:
-
name 및 value로 header 직렬화를 수행한 결과를 headers에 추가한다.
-
name이 "
Cookie"에 대해 byte-case-insensitive 일치이면:-
request에 포함되는 사용자 에이전트의 cookie store 안의 각 cookie에 대해:
참고: [COOKIES]는 store 안의 어떤 쿠키가 요청에 포함될 수 있는지에 대한 몇 가지 기준 요구사항을 정의하지만, 사용자 에이전트는 추가 제약을 부과해도 된다.
-
cookie가 주어졌을 때 쿠키 직렬화를 수행한 결과를 cookies에 추가한다.
-
-
-
-
destination을 request의 destination으로 둔다.
-
initiator type을 request의 initiator type으로 둔다.
-
timings를 request로 fetch timings 가져오기를 수행한 결과로 둔다.
-
network.RequestDataproduction과 일치하는 맵을 반환하되,request필드는 request id로 설정하고,url필드는 url로 설정하고,method필드는 method로 설정하고,headers필드는 headers로 설정하고, cookies 필드는 cookies로 설정하고,headersSize필드는 headers size로 설정하고,bodySize필드는 body size로 설정하고,destination필드는 destination으로 설정하고,initiatorType필드는 initiator type으로 설정하고,timings필드는 timings로 설정한다.
7.5.4.16. network.ResponseContent 타입
network.ResponseContent= {size: js-uint }
network.ResponseContent 타입은 네트워크 요청에 대한 디코딩된 응답을 나타낸다.
-
network.ResponseContentproduction과 일치하는 새 맵을 반환하되,size필드는 response의 response body info의 decoded size로 설정한다
7.5.4.17. network.ResponseData 타입
network.ResponseData= {url: text,protocol: text,status: js-uint,statusText: text,fromCache: bool,headers: [*network.Header],mimeType: text,bytesReceived: js-uint,headersSize: js-uint / null,bodySize: js-uint / null,content: network.ResponseContent, ?authChallenges: [*network.AuthChallenge], }
network.ResponseData 타입은 네트워크 요청에 대한 응답을 나타낸다.
response가 주어졌을 때 protocol 가져오기를 하려면:
-
protocol을 빈 문자열로 둔다.
-
response의 final connection timing info가 null이 아니면, protocol을 response의 final connection timing info의 ALPN negotiated protocol로 설정한다.
-
protocol이 빈 문자열이거나 "
unknown"과 같으면:-
protocol이 "
http" 또는 "https" 중 하나와 같고 response가 연관된 HTTP Response를 가지면.참고: [FETCH]는 HTTP network response와 response 객체 사이의 관계에 대해 명확하지 않다.
-
http version을 HTTP Response의 Status line의 HTTP-version [HTTP11]로 둔다.
-
http version이 "
HTTP/"로 시작하면:-
version을 5에서 http version의 length까지의 http version의 code unit substring으로 둔다.
-
version이 "
0.9"이면 protocol을 "http/0.9"로 설정하고, 그렇지 않고 version이 "1.0"이면 protocol을 "http/1.0"으로 설정하고, 그렇지 않고 version이 "1.1"이면 protocol을 "http/1.1"로 설정한다.
-
-
-
protocol을 반환한다.
-
protocol을 response가 주어졌을 때 protocol 가져오기를 수행한 결과로 설정한다.
-
status를 response의 status로 둔다.
-
status text를 response의 status message로 둔다.
-
response의 cache state가 "
local"이면 from cache를 true로 두고, 그렇지 않으면 false로 둔다. -
headers를 빈 목록으로 둔다.
-
mime type을 response에 대한 computed mime type의 essence로 둔다.
참고: 이는 브라우저가 실제로 사용 중인 MIME 타입으로, [MIMESNIFF] 명세의 정확한 알고리즘을 따르지 않더라도 그러하다.
-
response의 headers list 안의 각 (name, value)에 대해:
-
name 및 value로 header 직렬화를 수행한 결과를 headers에 추가한다.
-
-
bytes received를 response와 연관된 HTTP 응답의 일부로 전송된 byte의 총 수로 둔다.
-
headers size를 HTTP 응답의 header fields section의 일부로 전송된 byte 수로 둔다.
-
body size를 response의 response body info의 encoded size로 둔다.
-
content를 response로 response content info 가져오기를 수행한 결과로 둔다.
-
auth challenges를 response로 challenges 추출을 수행한 결과로 둔다.
-
network.ResponseDataproduction과 일치하는 맵을 반환하되,url필드는 url로 설정하고,protocol필드는 protocol로 설정하고,status필드는 status로 설정하고,statusText필드는 status text로 설정하고,fromCache필드는 from cache로 설정하고,headers필드는 headers로 설정하고,mimeType필드는 mime type으로 설정하고,bytesReceived필드는 bytes received로 설정하고,headersSize필드는 headers size로 설정하고,bodySize필드는 body size로 설정하고,content필드는 content로 설정하고,authChallenges필드는 auth challenges가 null이 아니면 auth challenges로 설정하거나, 그렇지 않으면 생략한다.
7.5.4.18. network.SetCookieHeader 타입
network.SetCookieHeader= {name: text,value: network.BytesValue, ?domain: text, ?httpOnly: bool, ?expiry: text, ?maxAge: js-int, ?path: text, ?sameSite: network.SameSite, ?secure: bool, }
network.SetCookieHeader는
Set-Cookie response header 안의 데이터를 나타낸다.
참고: 이는 input을 십진 숫자의 문자열로 나타내는 가장 짧은 표현을 만든다.
-
serialized를 빈 문자열로 둔다.
-
value를 input으로 둔다.
-
value가 0보다 큰 동안:
-
x를 value를 10으로 나눈 값으로 둔다.
-
most significant digits를 x의 정수 부분으로 둔다.
-
y를 most significant digits에 10을 곱한 값으로 둔다.
-
least significant digit를 value - y로 둔다.
-
단언: least significant digit는 0부터 9까지의 범위에 있는 정수이다. 양 끝값을 포함한다.
-
codepoint를 그 value가 U+0030 DIGIT ZERO의 value + least significant digit인 code point로 둔다.
-
codepoint를 serialized 앞에 추가한다.
-
value를 most significant digits로 설정한다.
-
-
serialized를 반환한다.
-
name을 protocol cookie["
name"]를 UTF-8 encode한 결과로 둔다. -
value를 protocol cookie["
value"]로 프로토콜 bytes 역직렬화를 수행한 결과로 둔다. -
header value를 name, `
=`, 및 value를 연결하여 형성된 byte sequence로 둔다. -
protocol cookie가 "
expiry"를 포함하면:-
attribute를 `
;Expires=`로 둔다 -
protocol cookie["
expiry"]를 UTF-8 encode한 결과를 attribute에 추가한다. -
attribute를 header value에 추가한다.
-
-
protocol cookie가 "
maxAge"를 포함하면:-
attribute를 `
;Max-Age=`로 둔다 -
max age string을 protocol cookie["
maxAge"]로 정수 직렬화를 수행한 결과로 둔다. -
max age string을 UTF-8 encode한 결과를 attribute에 추가한다.
-
attribute를 header value에 추가한다.
-
-
protocol cookie가 "
domain"을 포함하면:-
attribute를 `
;Domain=`으로 둔다 -
protocol cookie["
domain"]을 UTF-8 encode한 결과를 attribute에 추가한다. -
attribute를 header value에 추가한다.
-
-
protocol cookie가 "
path"를 포함하면:-
attribute를 `
;Path=`로 둔다 -
protocol cookie["
path"]를 UTF-8 encode한 결과를 attribute에 추가한다. -
attribute를 header value에 추가한다.
-
-
protocol cookie가 "
secure"를 포함하고 protocol cookie["secure"]가 true이면:-
`
;Secure`를 header value에 추가한다.
-
-
protocol cookie가 "
httpOnly"를 포함하고 protocol cookie["httpOnly"]가 true이면:-
`
;HttpOnly`를 header value에 추가한다.
-
-
protocol cookie가 "
sameSite"를 포함하면:-
attribute를 `
;SameSite=`로 둔다 -
protocol cookie["
sameSite"]를 UTF-8 encode한 결과를 attribute에 추가한다. -
attribute를 header value에 추가한다.
-
-
header value를 반환한다.
7.5.4.19. network.UrlPattern 타입
network.UrlPattern= ( network.UrlPatternPattern / network.UrlPatternString )network.UrlPatternPattern= {type:"pattern", ?protocol: text, ?hostname: text, ?port: text, ?pathname: text, ?search: text, }network.UrlPatternString= {type:"string",pattern: text, }
network.UrlPattern은 network
intercept에 대해 request
URL을 일치시키는 데 사용되는 pattern을 나타낸다.
URL이 network.UrlPattern과 일치되는 경우 URL은
파싱되고, 각 컴포넌트는 pattern 안의 대응하는 필드가 존재하면
그 필드와 동등한지 비교된다. pattern에서 누락된 필드는 항상 일치한다.
참고: 이 구문은 향후 확장성을 염두에 두고 설계되었다. 특히 이 구문은 [URLPattern] 명세에서 특별하게 취급되는 문자를 금지한다. 이러한 문자는 앞에 U+005C (\) 문자를 붙여 이스케이프할 수 있다.
-
forbidden characters를 codepoints «U+0028 ((), U+0029 ()), U+002A (*), U+007B ({), U+007D (})»의 집합으로 둔다
-
result를 빈 문자열로 둔다.
-
is escaped character를 false로 둔다.
-
pattern 안의 각 codepoint에 대해:
-
is escaped character가 false이면:
-
forbidden characters가 codepoint를 포함하면, 오류 코드 invalid argument인 오류를 반환한다.
-
codepoint가 U+005C (\)이면:
-
is escaped character를 true로 설정한다.
-
계속한다.
-
-
-
codepoint를 result에 추가한다.
-
is escaped character를 false로 설정한다.
-
-
데이터 result와 함께 성공을 반환한다.
-
has protocol을 true로 둔다.
-
has hostname을 true로 둔다.
-
has port를 true로 둔다.
-
has pathname을 true로 둔다.
-
has search를 true로 둔다.
-
pattern이
network.UrlPatternPatternproduction과 일치하면:-
pattern url을 빈 문자열로 둔다.
-
pattern이 "
protocol"을 포함하면:-
pattern["
protocol"]이 빈 문자열이면, 오류 코드 invalid argument인 오류를 반환한다. -
protocol을 pattern["
protocol"]로 URL Pattern 이스케이프 해제를 시도한 결과로 둔다. -
protocol 안의 각 codepoint에 대해:
-
codepoint가 ASCII alphanumeric이 아니고 «U+002B (+), U+002D (-), U+002E (.)»가 codepoint를 포함하지 않으면:
-
-
protocol을 pattern url에 추가한다.
-
-
그렇지 않으면:
-
has protocol을 false로 설정한다.
-
"
http"를 pattern url에 추가한다.
-
-
scheme을 pattern url로 ASCII lowercase를 수행한 결과로 둔다.
-
"
:"를 pattern url에 추가한다. -
scheme이 특수하면, "
//"를 pattern url에 추가한다. -
pattern이 "
hostname"을 포함하면:-
pattern["
hostname"]이 빈 문자열이면, 오류 코드 invalid argument인 오류를 반환한다. -
scheme이 "
file"이면 오류 코드 invalid argument인 오류를 반환한다. -
hostname을 pattern["
hostname"]로 URL Pattern 이스케이프 해제를 시도한 결과로 둔다. -
inside brackets를 false로 둔다.
-
hostname 안의 각 codepoint에 대해:
-
«U+002F (/), U+003F (?), U+0023 (#)»가 codepoint를 포함하면:
-
오류 코드 invalid argument인 오류를 반환한다.
-
-
inside brackets가 false이고 codepoint가 U+003A (:)이면:
-
오류 코드 invalid argument인 오류를 반환한다.
-
-
codepoint가 U+005B ([)이면, inside brackets를 true로 설정한다.
-
codepoint가 U+005D (])이면, inside brackets를 false로 설정한다.
-
-
hostname을 pattern url에 추가한다.
-
-
그렇지 않으면:
-
scheme이 "
file"이 아니면, "placeholder"를 pattern url에 추가한다. -
has hostname을 false로 설정한다.
-
-
pattern이 "
port"를 포함하면:-
pattern["
port"]가 빈 문자열이면, 오류 코드 invalid argument인 오류를 반환한다. -
port를 pattern["
port"]로 URL Pattern 이스케이프 해제를 시도한 결과로 둔다. -
"
:"를 pattern url에 추가한다. -
port 안의 각 codepoint에 대해:
-
codepoint가 ASCII digit가 아니면:
-
오류 코드 invalid argument인 오류를 반환한다.
-
-
-
port를 pattern url에 추가한다.
-
-
그렇지 않으면:
-
has port를 false로 설정한다.
-
-
pattern이 "
pathname"을 포함하면:-
pathname을 pattern["
pathname"]로 URL Pattern 이스케이프 해제를 시도한 결과로 둔다. -
pathname이 U+002F (/)로 시작하지 않으면 "
/"를 pattern url에 추가한다. -
pathname 안의 각 codepoint에 대해:
-
«U+003F (?), U+0023 (#)»가 codepoint를 포함하면:
-
오류 코드 invalid argument인 오류를 반환한다.
-
-
-
pathname을 pattern url에 추가한다.
-
-
그렇지 않으면:
-
has pathname을 false로 설정한다.
-
-
pattern이 "
search"를 포함하면:-
search를 pattern["
search"]로 URL pattern 이스케이프 해제를 시도한 결과로 둔다. -
search가 U+003F (?)로 시작하지 않으면 "
?"를 pattern url에 추가한다. -
search 안의 각 codepoint에 대해:
-
codepoint가 U+0023 (#)이면:
-
오류 코드 invalid argument인 오류를 반환한다.
-
-
-
search를 pattern url에 추가한다.
-
-
그렇지 않으면:
-
has search를 false로 설정한다.
-
-
-
그렇지 않고 pattern이
network.UrlPatternStringproduction과 일치하면:-
pattern url을 pattern["
pattern"]로 URL pattern 이스케이프 해제를 시도한 결과로 둔다.
-
-
url을 pattern url을 파싱한 결과로 둔다.
-
url이 failure이면, 오류 코드 invalid argument인 오류를 반환한다.
-
parsed를 다음 필드를 가진 구조체로 둔다:
- protocol
- has protocol이 true이면 url의 scheme, 그렇지 않으면 null.
- hostname
- has hostname이 true이면 url의 host, 그렇지 않으면 null.
- port
-
-
has port가 false이면:
-
null.
-
-
그렇지 않으면:
-
url의 scheme이 특수하고, url의 scheme의 default port가 null이 아니며, url의 port가 null이거나 scheme의 default port와 같으면:
-
빈 문자열.
-
-
그렇지 않고, url의 port가 null이 아니면:
-
그렇지 않으면:
-
null.
-
-
-
- pathname
-
-
has pathname이 false이면:
-
null.
-
-
그렇지 않으면:
-
url의 path가 빈 문자열이 아니고 비어 있지 않으면 url로 URL path serializer를 실행한 결과, 그렇지 않으면 null.
-
-
- search
-
데이터 parsed와 함께 성공을 반환한다.
-
url을 url string을 파싱한 결과로 둔다.
-
url pattern의 protocol이 null이 아니고 url의 scheme과 같지 않으면 false를 반환한다.
-
url pattern의 hostname이 null이 아니고 url의 host와 같지 않으면 false를 반환한다.
-
url pattern의 port가 null이 아니면:
-
port를 null로 둔다.
-
url의 scheme이 특수하고, url의 scheme의 default port가 null이 아니며, url의 port가 null이거나 scheme의 default port와 같으면:
-
port를 빈 문자열로 설정한다.
-
-
그렇지 않고, url의 port가 null이 아니면:
-
url pattern의 port가 port와 같지 않으면 false를 반환한다.
-
-
url pattern의 pathname이 null이 아니고 url로 URL path serializer를 실행한 결과와 같지 않으면 false를 반환한다.
-
url pattern의 search가 null이 아니면:
-
url query를 url의 query로 둔다.
-
url query가 null이면, url query를 빈 문자열로 설정한다.
-
url pattern의 search가 url query와 같지 않으면 false를 반환한다.
-
-
true를 반환한다.
7.5.5. 명령
7.5.5.1. network.addDataCollector 명령
network.addDataCollector는 collector를 추가한다.
- 명령 타입
-
network.AddDataCollector= (method:"network.addDataCollector",params: network.AddDataCollectorParameters )network.AddDataCollectorParameters= {dataTypes: [+network.DataType],maxEncodedDataSize: js-uint, ?collectorType: network.CollectorType .default "blob", ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], } - 반환 타입
-
network.AddDataCollectorResult= {collector: network.Collector }
-
collector id를 UUID의 문자열 표현으로 둔다.
-
input context ids를 빈 집합으로 둔다.
-
command parameters의
contexts필드가 존재하면, input context ids를 command parameters[contexts]로 집합 생성한 값으로 설정한다. -
data types를 command parameters["
dataTypes"]로 집합 생성한 값으로 둔다. -
max encoded item size를 command parameters ["
maxEncodedDataSize"]로 둔다.참고:
maxEncodedDataSize매개변수는 max encoded item size를 나타내며, 전체 collector가 수집한 크기가 아니라 주어진 collector가 수집하는 각 요청의 크기를 제한한다.참고: 서로 다른 구현은 서로 다른 인코딩을 지원할 수 있으며, 이는 브라우저마다 인코딩된 크기가 다를 수 있음을 의미한다. 따라서 동일한 data collector 구성에 대해서도 일부 network data는 특정 구현에서만 max encoded item size에 들어맞을 수 있다.
-
collector type을 command parameters ["
collectorType"]로 둔다. -
input user context ids를 빈 집합으로 둔다.
-
command parameters의
userContexts필드가 존재하면, input user context ids를 command parameters[userContexts]로 집합 생성한 값으로 설정한다. -
input user context ids가 비어 있지 않고 input context ids도 비어 있지 않으면, 오류 코드 invalid argument인 오류를 반환한다.
-
max encoded item size가 0이거나 max encoded item size가 max total collected size보다 크면, 오류 코드 invalid argument인 오류를 반환한다.
-
input context ids가 비어 있지 않으면:
-
navigables를 input context ids로 id로 유효한 navigable 가져오기를 시도한 결과로 둔다.
-
navigables 안의 각 navigable에 대해:
-
navigable이 최상위 traversable이 아니면, 오류 코드 invalid argument인 오류를 반환한다.
-
-
-
그렇지 않고 input user context ids가 비어 있지 않으면:
-
input user context ids의 각 user context id에 대해:
-
user context를 user context id로 사용자 컨텍스트 가져오기를 수행한 결과로 둔다.
-
user context가 null이면, 오류 코드 no such user context인 오류를 반환한다.
-
-
-
collector를 max encoded item size 필드가 max encoded item size로 설정되고, data types 필드가 data types로 설정되고, collector 필드가 collector id로 설정되고, collector type 필드가 collector type으로 설정되고, contexts 필드가 input context ids로 설정되고, user contexts 필드가 input user context ids로 설정된 collector로 둔다.
-
session의 network collectors[collector id]를 collector로 설정한다.
-
network.AddDataCollectorResultproduction과 일치하는 새 맵을 반환하되,collector필드는 collector id로 설정한다.
7.5.5.2. network.addIntercept 명령
network.addIntercept 명령은 network intercept를 추가한다.
- 명령 타입
-
network.AddIntercept= (method:"network.addIntercept",params: network.AddInterceptParameters )network.AddInterceptParameters= {phases: [+network.InterceptPhase], ?contexts: [+browsingContext.BrowsingContext], ?urlPatterns: [*network.UrlPattern], }network.InterceptPhase="beforeRequestSent"/"responseStarted"/"authRequired" - 반환 타입
-
network.AddInterceptResult= {intercept: network.Intercept }
-
intercept를 UUID의 문자열 표현으로 둔다.
-
url patterns를 command parameters의
urlPatterns필드가 존재하면 그 필드로 두고, 그렇지 않으면 빈 목록으로 둔다. -
navigables를 null로 둔다.
-
command parameters의
contexts필드가 존재하면:-
navigables를 빈 집합으로 설정한다.
-
command parameters["
contexts"]의 각 navigable id에 대해-
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
navigable이 최상위 traversable이 아니면, 오류 코드 invalid argument인 오류를 반환한다.
-
navigable를 navigables에 추가한다.
-
-
navigables가 빈 집합이면, 오류 코드 invalid argument인 오류를 반환한다.
-
-
intercept map을 session의 intercept map으로 둔다.
-
parsed patterns를 빈 목록으로 둔다.
-
url patterns 안의 각 url pattern에 대해:
-
parsed를 url pattern으로 URL pattern 파싱을 시도한 결과로 둔다.
-
parsed를 parsed patterns에 추가한다.
-
-
intercept map[intercept]를
url patternsparsed patterns,phasescommand parameters["phases"], 및browsingContextsnavigables를 가진 구조체로 설정한다. -
network.AddInterceptResultproduction과 일치하는 새 맵을 반환하되,intercept필드는 intercept로 설정한다.
7.5.5.3. network.continueRequest 명령
network.continueRequest 명령은 network intercept에 의해 차단된 요청을 계속한다.
- 명령 타입
-
network.ContinueRequest= (method:"network.continueRequest",params: network.ContinueRequestParameters )network.ContinueRequestParameters= {request: network.Request, ?body: network.BytesValue, ?cookies: [*network.CookieHeader], ?headers: [*network.Header], ?method: text, ?url: text, } - 반환 타입
-
network.ContinueRequestResult= EmptyResult
-
blocked requests를 session의 blocked request map으로 둔다.
-
request id를 command parameters["
request"]로 둔다. -
blocked requests가 request id를 포함하지 않으면, 오류 코드 no such request인 오류를 반환한다.
-
(request, phase, response)를 blocked requests[request id]로 둔다.
-
phase가 "
beforeRequestSent"가 아니면, 오류 코드 invalid argument인 오류를 반환한다. -
command parameters가 "
url"을 포함하면:-
url record를 base URL null과 함께 command parameters["
url"]에 URL parser를 적용한 결과로 둔다. -
url record가 failure이면, 오류 코드 invalid argument인 오류를 반환한다.
TODO: 여기서도 resume해야 하는가?
-
request의 url을 url record로 둔다.
-
-
command parameters가 "
method"를 포함하면:-
method를 command parameters["
method"]로 둔다. -
method가 method token production과 일치하지 않으면, 오류 코드 "
invalid argument"인 오류를 반환한다. -
request의 method를 method로 둔다.
-
-
command parameters가 "
headers"를 포함하면:-
headers를 빈 header list로 둔다.
-
command parameters["
headers"] 안의 header에 대해:-
deserialized header를 header로 header 역직렬화를 수행한 결과로 둔다.
-
deserialized header의 name이 field-name token production과 일치하지 않으면, 오류 코드 "
invalid argument"인 오류를 반환한다. -
deserialized header의 value가 header value production과 일치하지 않으면, 오류 코드 "
invalid argument"인 오류를 반환한다. -
deserialized header를 headers에 추가한다.
-
-
request의 headers list를 headers로 설정한다.
-
-
command parameters가 "
cookies"를 포함하면:-
cookie header를 빈 byte sequence로 둔다.
-
command parameters["
cookies"] 안의 각 cookie에 대해:-
cookie header가 비어 있지 않으면, `
;`를 cookie header에 추가한다. -
cookie로 cookie header 직렬화를 수행한 결과를 cookie header에 추가한다.
-
-
found cookie header를 false로 둔다.
-
request의 headers list 안의 각 header에 대해:
-
name을 header의 name으로 둔다.
-
name을 byte-lowercase한 값이 `
cookie`이면:-
header의 value를 cookie header로 설정한다.
-
found cookie header를 true로 설정한다.
-
중단한다.
-
-
-
found cookie header가 false이면:
-
header (`
Cookie`, cookie header)를 request의 headers list에 추가한다.
-
-
-
command parameters가 "
body"를 포함하면:-
body를 command parameters["
body"]로 프로토콜 bytes 역직렬화를 수행한 결과로 둔다. -
request의 body를 body로 설정한다.
-
-
"
continue request", request id, 및 (null, "incomplete")로 재개한다. -
데이터 null과 함께 성공을 반환한다.
7.5.5.4. network.continueResponse 명령
network.continueResponse 명령은
network intercept에 의해
차단된
response를 계속한다. 이는 responseStarted 단계에서 호출되어
response의 status 및 headers를 수정하되, 여전히 network response body를 제공할 수 있다.
- 명령 타입
-
network.ContinueResponse= (method:"network.continueResponse",params: network.ContinueResponseParameters )network.ContinueResponseParameters= {request: network.Request, ?cookies: [*network.SetCookieHeader] ?credentials: network.AuthCredentials, ?headers: [*network.Header], ?reasonPhrase: text, ?statusCode: js-uint, } - 반환 타입
-
network.ContinueResponseResult= EmptyResult
-
request id를 command parameters["
request"]로 둔다. -
response를 session, "
continueResponse" 및 command parameters로 response 업데이트를 시도한 결과로 둔다. -
"
continue request", request id, 및 (response, "incomplete")로 재개한다. -
데이터 null과 함께 성공을 반환한다.
7.5.5.5. network.continueWithAuth 명령
network.continueWithAuth 명령은
authRequired 단계에서
network intercept에 의해
차단된
response를 계속한다.
- 명령 타입
-
network.ContinueWithAuth= (method:"network.continueWithAuth",params: network.ContinueWithAuthParameters )network.ContinueWithAuthParameters= {request: network.Request, (network.ContinueWithAuthCredentials // network.ContinueWithAuthNoCredentials) }network.ContinueWithAuthCredentials= (action:"provideCredentials",credentials: network.AuthCredentials )network.ContinueWithAuthNoCredentials= (action:"default"/"cancel") - 반환 타입
-
network.ContinueWithAuthResult= EmptyResult
-
blocked requests를 session의 blocked request map으로 둔다.
-
request id를 command parameters["
request"]로 둔다. -
blocked requests가 request id를 포함하지 않으면, 오류 코드 no such request인 오류를 반환한다.
-
(request, phase, response)를 blocked requests[request id]로 둔다.
-
phase가 "
authRequired"가 아니면, 오류 코드 invalid argument인 오류를 반환한다. -
command parameters "
action"이 "cancel"이면, response의 authentication credentials를 "cancelled"로 설정한다. -
command parameters "
action"이 "provideCredentials"이면:-
credentials를 command parameters["
credentials"]로 둔다. -
단언: credentials["
type"]는 "password"이다. -
response의 authentication credentials를 (credentials["
username"], credentials["password"])로 설정한다
-
-
"
continue request", request id, 및 (response, "incomplete")로 재개한다. -
데이터 null과 함께 성공을 반환한다.
7.5.5.6. network.disownData 명령
network.disownData 명령은 주어진 collector에 대해 수집된 network data를 해제한다.
- 명령 타입
-
network.DisownData= (method:"network.disownData",params: network.DisownDataParameters )network.DisownDataParameters= {dataType: network.DataType,collector: network.Collector,request: network.Request, } - 반환 타입
-
network.DisownDataResult= EmptyResult
-
data type을 command parameters의 "
dataType" 필드 값으로 둔다. -
collector id를 command parameters의 "
collector" 필드 값으로 둔다. -
request id를 command parameters의 "
request" 필드 값으로 둔다. -
collectors를 session의 network collectors로 둔다.
-
collectors가 collector id를 포함하지 않으면, 오류 코드 no such network collector인 오류를 반환한다.
-
collected data를 request id 및 data type으로 수집된 데이터 가져오기를 수행한 결과로 둔다.
-
collected data가 null이면, 오류 코드 no such network data인 오류를 반환한다.
-
collected data 및 collector id로 data에서 collector 제거를 수행한다.
7.5.5.7. network.failRequest 명령
network.failRequest 명령은 network intercept에 의해 차단된 fetch를 실패시킨다.
- 명령 타입
-
network.FailRequest= (method:"network.failRequest",params: network.FailRequestParameters )network.FailRequestParameters= {request: network.Request, } - 반환 타입
-
network.FailRequestResult= EmptyResult
-
blocked requests를 session의 blocked request map으로 둔다.
-
request id를 command parameters["
request"]로 둔다. -
blocked requests가 request id를 포함하지 않으면, 오류 코드 no such request인 오류를 반환한다.
-
(request, phase, response)를 blocked requests[request id]로 둔다.
-
phase가 "
authRequired"이면, 오류 코드 invalid argument인 오류를 반환한다. -
response를 새 network error로 둔다.
정확한 오류 종류를 설정할 수 있도록 허용한다 [Issue #508]
-
"
continue request", request id, 및 (response, "complete")로 재개한다. -
데이터 null과 함께 성공을 반환한다.
7.5.5.8. network.getData 명령
network.getData 명령은 사용 가능한 경우 네트워크 데이터를 가져온다.
- 명령 타입
-
network.GetData= (method:"network.getData",params: network.GetDataParameters )network.GetDataParameters= {dataType: network.DataType, ?collector: network.Collector, ?disown: bool .default false,request: network.Request, } - 반환 타입
-
network.GetDataResult= {bytes: network.BytesValue, }
-
data type을 command parameters["
dataType"]로 둔다. -
request id를 command parameters["
request"]로 둔다. -
collector id를 null로 둔다.
-
command parameters가 "
collector"를 포함하면:-
collectors를 session의 network collectors로 둔다.
-
collectors가 collector id를 포함하지 않으면, 오류를 오류 코드 no such network collector와 함께 반환한다.
-
collector id를 command parameters["
collector"]로 설정한다.
-
-
disown을 command parameters["
disown"]로 둔다. -
disown이 true이고 collector id가 null이면, 오류를 오류 코드 invalid argument와 함께 반환한다.
-
collected data를 request id 및 data type이 주어진 get collected data로 둔다.
-
collected data가 null이면:
-
오류를 오류 코드 no such network data와 함께 반환한다.
-
-
collected data의 pending이 true이면:
-
"network data collected" 및 (request id, data type)으로 대기한다.
-
-
collector id가 null이 아니고 collected data의 collectors가 collector id를 포함하지 않으면:
-
오류를 오류 코드 no such network data와 함께 반환한다.
-
-
bytes를 collected data의 bytes로 둔다.
-
bytes가 null이면,
-
오류를 오류 코드 unavailable network data와 함께 반환한다.
-
-
body를
network.GetDataResult생성과 일치하는 맵으로 두고,bytes필드를 bytes로 설정한다. -
disown이 true이면, collected data 및 collector id로 remove collector from data를 수행한다.
-
성공을 데이터 body와 함께 반환한다.
7.5.5.9. network.provideResponse 명령
network.provideResponse 명령은 완전한 응답을 제공하여, 네트워크 인터셉트에 의해 차단된 요청을 계속한다.
참고: 이는 요청이 일반 요청 생명주기를 거쳐 진행되는 것을 막지 않으며, 따라서 진행됨에 따라 다른 이벤트를 방출한다.
- 명령 타입
-
network.ProvideResponse= (method:"network.provideResponse",params: network.ProvideResponseParameters )network.ProvideResponseParameters= {request: network.Request, ?body: network.BytesValue, ?cookies: [*network.SetCookieHeader], ?headers: [*network.Header], ?reasonPhrase: text, ?statusCode: js-uint, } - 반환 타입
-
network.ProvideResponseResult= EmptyResult
-
request id를 command parameters["
request"]로 둔다. -
response를 session, "
provideResponse", 및 command parameters로 update the response를 시도한 결과로 둔다. -
command parameters가 "
body"를 포함하면:-
body를 command parameters["
body"]로 deserialize protocol bytes한 것으로 둔다.
-
-
"
continue request", request id, 및 (response,"complete")로 재개한다. -
성공을 데이터 null과 함께 반환한다.
7.5.5.10. network.removeDataCollector 명령
network.removeDataCollector 명령은 컬렉터를 제거한다.
- 명령 타입
-
network.RemoveDataCollector= (method:"network.removeDataCollector",params: network.RemoveDataCollectorParameters )network.RemoveDataCollectorParameters= {collector: network.Collector } - 반환 타입
-
network.RemoveDataCollectorResult= EmptyResult
-
collector id를 command parameters의 "
collector" 필드 값으로 둔다. -
collectors를 session의 network collectors로 둔다.
-
collectors가 collector id를 포함하지 않으면, 오류를 오류 코드 no such network collector와 함께 반환한다.
-
session의 network collectors에서 collector id를 제거한다.
-
collected network data 내의 각 collected data에 대해, collected data 및 collector id로 remove collector from data를 수행한다.
7.5.5.11. network.removeIntercept 명령
network.removeIntercept 명령은 네트워크 인터셉트를 제거한다.
- 명령 타입
-
network.RemoveIntercept= (method:"network.removeIntercept",params: network.RemoveInterceptParameters )network.RemoveInterceptParameters= {intercept: network.Intercept } - 반환 타입
-
network.RemoveInterceptResult= EmptyResult
-
intercept를 command parameters의 "
intercept" 필드 값으로 둔다. -
intercept map을 session의 intercept map으로 둔다.
-
intercept map이 intercept를 포함하지 않으면, 오류를 오류 코드 no such intercept와 함께 반환한다.
-
intercept map에서 intercept를 제거한다.
참고: 인터셉트의 제거는 이 인터셉트에 의해 이미 차단된 요청에는 영향을 주지 않는다. 향후 요청 또는 기존 요청의 향후 단계만 영향을 받는다.
7.5.5.12. network.setCacheBehavior 명령
network.setCacheBehavior 명령은 특정 요청의 네트워크 캐시 동작을 구성한다.
- 명령 타입
-
network.SetCacheBehavior= (method:"network.setCacheBehavior",params: network.SetCacheBehaviorParameters )network.SetCacheBehaviorParameters= {cacheBehavior:"default"/"bypass", ?contexts: [+browsingContext.BrowsingContext] } - 반환 타입
-
network.SetCacheBehaviorResult= EmptyResult
-
navigable을 null로 둔다.
-
-
environment settings를 request의 client로 둔다.
-
navigable 중에서 그 active window가 environment settings의 전역 객체인 것이 있으면, navigable을 그 navigable의 최상위 traversable로 설정한다.
-
-
navigable이 null이 아니고 navigable cache behavior map이 navigable을 포함하면, navigable cache behavior map[navigable]을 반환한다.
-
default cache behavior를 반환한다.
-
top-level navigable을 navigable의 최상위 traversable로 둔다.
-
navigable cache behavior map이 top-level navigable를 포함하면, navigable cache behavior map[top-level navigable]을 반환한다.
-
default cache behavior를 반환한다.
-
behavior를 command parameters["
cacheBehavior"]로 둔다. -
command parameters가 "
contexts"를 포함하지 않으면:-
default cache behavior를 behavior로 설정한다.
-
behavior의 값을 기준으로 전환한다:
- "
bypass" - 구현별 리소스 캐시를 비활성화하기 위한 구현 정의 단계를 수행한다.
- "
default" - 현재 원격 끝 구성에서 일반적으로 활성화되는 구현별 리소스 캐시를 활성화하기 위한 구현 정의 단계를 수행한다.
- "
-
성공을 데이터 null과 함께 반환한다.
-
-
navigables를 빈 집합으로 둔다.
-
command parameters["
contexts"]의 각 navigable id에 대해:-
context를 navigable id로 get a navigable을 시도한 결과로 둔다.
-
context가 최상위 브라우징 컨텍스트가 아니면, 오류를 오류 코드 invalid argument와 함께 반환한다.
-
context를 navigables에 추가한다.
-
-
navigables 내의 각 navigable에 대해:
-
navigable cache behavior map이 navigable을 포함하고, navigable cache behavior map[navigable]이 behavior와 같으면 계속한다.
-
behavior의 값을 기준으로 전환한다:
- "
bypass" - navigable이 최상위 브라우징 컨텍스트인 모든 브라우징 컨텍스트에서 비롯된 네트워크 요청에 대해, 구현별 리소스 캐시를 비활성화하기 위한 구현 정의 단계를 수행한다.
- "
default" - navigable이 최상위 브라우징 컨텍스트인 모든 브라우징 컨텍스트에서 비롯된 네트워크 요청에 대해, 현재 원격 끝 구성에서 일반적으로 활성화되는 구현별 리소스 캐시를 활성화하기 위한 구현 정의 단계를 수행한다.
- "
-
behavior가 default cache behavior와 같으면:
-
navigable cache behavior map이 navigable을 포함하면, navigable cache behavior map[navigable]을 제거한다.
-
-
그렇지 않으면:
-
navigable cache behavior map[navigable]을 behavior로 설정한다.
-
-
-
성공을 데이터 null과 함께 반환한다.
7.5.5.13. network.setExtraHeaders 명령
network.setExtraHeaders 명령은 기존 요청 헤더를 확장하거나 덮어쓸 헤더를 지정할 수 있게 한다.
- 명령 타입
-
network.SetExtraHeaders= (method:"network.setExtraHeaders",params: network.SetExtraHeadersParameters )network.SetExtraHeadersParameters= {headers: [*network.Header] ?contexts: [+browsingContext.BrowsingContext] ?userContexts: [+browser.UserContext] } - 반환 타입
-
network.SetExtraHeadersResult= EmptyResult
-
request headers를 request의 header list로 둔다.
-
headers 내의 각 header에 대해:
-
request headers 내에 header를 설정한다.
참고: 이는 값이 이미 있는 경우 항상 기존 값을 덮어쓴다. 특히 기존 `Set-Cookie` 헤더에 쿠키를 추가하지 않는다.
-
-
Assert: related navigables의 size는 0 또는 1이다.
참고: 이는 여러 navigable과 연관된 worker에 대해서는 동작하지 않음을 의미한다. 이 경우 어떤 순서로 헤더를 재정의해야 하는지 명확하지 않다.
-
request 및 session의 extra headers의 default headers로 헤더 업데이트를 수행한다
-
user context headers를 session의 extra headers의 user context headers로 둔다.
-
related navigables 내의 navigable에 대해:
-
user context를 navigable의 연관된 사용자 컨텍스트로 둔다.
-
user context headers가 user context를 포함하면, request 및 user context headers[user context]로 헤더 업데이트를 수행한다
-
-
navigable headers를 session의 extra headers의 navigable headers로 둔다.
-
related navigables 내의 navigable에 대해:
-
top-level traversable을 navigable의 최상위 traversable로 둔다.
-
navigable headers가 top-level traversable를 포함하면, request 및 navigable headers[top-level traversable]로 헤더 업데이트를 수행한다.
-
-
command parameters가 "
userContexts"를 포함하고, command parameters가 "contexts"를 포함하면, 오류를 오류 코드 invalid argument와 함께 반환한다. -
headers를 command parameters["
headers"]로 create a headers list를 시도한 결과로 둔다. -
command parameters가 "
userContexts"를 포함하면:-
user contexts를 빈 목록으로 둔다.
-
command parameters["
userContexts"] 내의 user context id에 대해:-
user context를 user context id로 get user context한 것으로 둔다.
-
user context가 null이면, 오류를 오류 코드 no such user context와 함께 반환한다.
-
user context를 user contexts에 추가한다.
-
-
target을 session의 extra headers의 user context headers로 둔다
-
user contexts 내의 user context에 대해:
-
target[user context]를 headers로 설정한다.
-
-
성공을 데이터 null과 함께 반환한다.
-
-
command parameters가 "
contexts"를 포함하면:-
navigables를 command parameters["
contexts"]로 get valid top-level traversables by ids를 시도한 결과로 둔다. -
target을 session의 extra headers의 navigable headers로 둔다
-
navigables 내의 navigable에 대해:
-
target[navigable]를 headers로 설정한다.
-
-
성공을 데이터 null과 함께 반환한다.
-
-
session의 extra headers의 default headers를 headers로 설정한다.
-
성공을 데이터 null과 함께 반환한다.
7.5.6. 이벤트
7.5.6.1. network.authRequired 이벤트
- 이벤트 타입
-
network.AuthRequired= (method:"network.authRequired",params: network.AuthRequiredParameters )network.AuthRequiredParameters= { network.BaseParameters,response: network.ResponseData }
이 이벤트는 사용자 에이전트가 인증 자격 증명을 요청하려고 할 때 방출된다.
-
redirect count를 request의 리다이렉트 횟수로 둔다.
-
Assert: before request sent 맵[request]은 redirect count와 같다.
참고: 이는 모든 호출자가 이 단계를 실행하기 전에 WebDriver BiDi before request sent 단계가 request로 호출되도록 보장해야 함을 의미한다.
-
request의 클라이언트가 null이 아니면, related navigables를 request의 클라이언트로 관련 navigable 가져오기를 수행한 결과로 둔다. 그렇지 않으면 related navigables를 빈 집합으로 둔다.
-
"
network.authRequired"와 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합의 각 session에 대해:-
params를 session, "
network.authRequired", 그리고 request로 네트워크 이벤트 처리를 수행한 결과로 둔다. -
response data를 response로 응답 데이터 가져오기를 수행한 결과로 둔다.
-
Assert: response data가 포함한다 "
authChallenge". -
params의
response필드를 response data로 설정한다. -
Assert: params는
network.AuthRequiredParameters산출식과 일치한다. -
body를
params필드가 params로 설정된,network.AuthRequired산출식과 일치하는 맵으로 둔다. -
session 및 body로 이벤트를 방출한다.
-
params["
isBlocked"]가 true이면:-
blocked requests를 session의 차단된 요청 맵으로 둔다.
-
request id를 request의 request id로 둔다.
-
blocked requests[request id]를 (request, "
authRequired", response)로 설정한다. -
«"
continue request"» 및 request id로 Await한다. -
blocked requests[request id]를 제거한다.
-
-
7.5.6.2. network.beforeRequestSent 이벤트
- 이벤트 타입
-
network.BeforeRequestSent= (method:"network.beforeRequestSent",params: network.BeforeRequestSentParameters )network.BeforeRequestSentParameters= { network.BaseParameters, ?initiator: network.Initiator, }
이 이벤트는 요청이 전송되기 전(네트워크를 통해 전송되기 전이거나 serviceworker 또는 로컬 캐시에서 처리되기 전)에 방출된다.
-
settings를 request의 클라이언트로 둔다.
-
related navigables를 settings로 관련 navigable 가져오기를 수행한 결과로 둔다.
-
related navigables의 각 navigable에 대해:
-
navigable의 연관된 사용자 컨텍스트가 user context이면 true를 반환한다.
-
-
false를 반환한다.
-
related navigables의 각 navigable에 대해:
-
top-level traversable을 navigable의 최상위 traversable로 둔다.
-
user context를 top-level traversable의 연관된 사용자 컨텍스트로 둔다.
-
활성 BiDi 세션의 각 session에 대해:
-
session의 에뮬레이트된 네트워크 조건의 navigable 네트워크 조건이 top-level traversable을 포함하면, session의 에뮬레이트된 네트워크 조건의 navigable 네트워크 조건[top-level traversable]를 반환한다.
-
-
활성 BiDi 세션의 각 session에 대해:
-
session의 에뮬레이트된 네트워크 조건의 사용자 컨텍스트 네트워크 조건이 user context를 포함하면, session의 에뮬레이트된 네트워크 조건의 사용자 컨텍스트 네트워크 조건[user context]를 반환한다.
-
-
활성 BiDi 세션의 각 session에 대해:
-
session의 에뮬레이트된 네트워크 조건의 기본 네트워크 조건이 null이 아니면, session의 에뮬레이트된 네트워크 조건의 기본 네트워크 조건을 반환한다.
-
-
-
null을 반환한다.
-
navigable를 settings의 관련 전역 객체의 연관된
Document의 노드 navigable로 둔다. -
emulated network conditions를 [navigable]로 에뮬레이트된 네트워크 조건 가져오기를 수행한 결과로 둔다.
-
emulated network conditions가 null이 아니고 emulated network conditions의 offline이 true이면 true를 반환한다.
-
false를 반환한다.
-
사용자 컨텍스트 집합의 각 user context에 대해:
-
request와 user context로 요청이 사용자 컨텍스트에서 비롯되는지 단계가 true를 반환하면:
-
활성 BiDi 세션의 각 session에 대해:
참고: user context는 둘 이상의 사용자 컨텍스트에서 안전하지 않은 인증서 허용 재정의 맵에 포함될 수 없다.
-
session의 사용자 컨텍스트에서 안전하지 않은 인증서 허용 재정의 맵이 user context를 포함하면:
-
accept insecure certificates를 session의 사용자 컨텍스트에서 안전하지 않은 인증서 허용 재정의 맵[user context]으로 둔다.
-
accept insecure certificates가 true이면:
-
Assert 엔드포인트 노드가 안전하지 않은 TLS 연결 허용을 지원한다.
-
request에 대해 Basic Certificate Processing 단계를 실행할 때, 단계 a와 그 밖의 구현 정의 인증서 검증 단계를 건너뛴다.
-
-
그렇지 않으면, request에 대해 Basic Certificate Processing 단계를 실행할 때 모든 단계와 그 밖의 구현 정의 인증서 검증 단계를 수행한다.
-
참고: user context는 둘 이상의 사용자 컨텍스트에서 프록시 구성 맵에 포함될 수 없다.
-
session의 사용자 컨텍스트에서 프록시 구성 맵이 user context를 포함하면:
-
proxy configuration을 session의 사용자 컨텍스트에서 프록시 구성 맵[user context]으로 둔다.
-
request가 proxy configuration에 정의된 프록시 설정을 사용하도록 구현 정의 단계를 수행한다.
참고: 이 설정은 사용자 컨텍스트가 생성될 때 검증되므로 이 단계에서는 유효한 것으로 가정한다. 프록시에 접근할 때 발생하는 오류는 요청을 처리할 때 네트워크 오류로 보고된다.
-
-
-
-
-
request로 네트워크 요청 본문 수집 가능 시 수집을 수행한다.
-
before request sent 맵이 request를 포함하지 않으면, before request sent 맵[request]을 새 집합으로 설정한다.
-
redirect count를 request의 리다이렉트 횟수로 둔다.
-
redirect count를 before request sent 맵[request]에 추가한다.
-
request의 클라이언트가 null이 아니면, related navigables를 request의 클라이언트로 관련 navigable 가져오기를 수행한 결과로 둔다. 그렇지 않으면 related navigables를 빈 집합으로 둔다.
-
response를 null로 둔다.
-
response status를 "
incomplete"로 둔다. -
활성 BiDi 세션의 각 session에 대해:
-
session, request 및 related navigables로 요청 헤더 업데이트를 수행한다.
-
-
"
network.beforeRequestSent"와 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합의 각 session에 대해:-
params를 session, "
network.beforeRequestSent", 그리고 request로 네트워크 이벤트 처리를 수행한 결과로 둔다. -
initiator를 request로 initiator 가져오기를 수행한 결과로 둔다.
-
initiator가 비어 있지 않으면, params의
initiator필드를 initiator로 설정한다. -
Assert: params는
network.BeforeRequestSentParameters산출식과 일치한다. -
body를
params필드가 params로 설정된,network.BeforeRequestSent산출식과 일치하는 맵으로 둔다. -
session 및 body로 이벤트를 방출한다.
-
params["
isBlocked"]가 true이면:-
blocked requests를 session의 차단된 요청 맵으로 둔다.
-
request id를 request의 request id로 둔다.
-
blocked requests[request id]를 (request, "
beforeRequestSent", null)로 설정한다. -
(response, status)를 «"
continue request"» 및 request의 request id로 await한 결과로 둔다. -
status가 "
complete"이면 response status를 status로 설정한다. -
blocked requests[request id]를 제거한다.
참고: 대기하는 동안 요청의 추가 처리는 발생하지 않는다.
-
-
-
emulated network conditions를 related navigables로 에뮬레이트된 네트워크 조건 가져오기를 수행한 결과로 둔다.
-
emulated network conditions가 null이 아니고 emulated network conditions의 offline이 true이면, (network error, "
complete")를 반환한다. -
(response, response status)를 반환한다.
7.5.6.3. network.fetchError 이벤트
- 이벤트 타입
-
network.FetchError= (method:"network.fetchError",params: network.FetchErrorParameters )network.FetchErrorParameters= { network.BaseParameters,errorText: text, }
이 이벤트는 네트워크 요청이 오류로 종료될 때 방출된다.
-
before request sent 맵[request]가 request의 리다이렉트 횟수를 포함하지 않으면, request로 WebDriver BiDi before request sent 단계를 실행한다.
참고: 이는 호출자가 모든 오류 경로에서 WebDriver BiDi before request sent 단계를 명시적으로 호출할 필요 없이,
network.fetchError전에network.beforeRequestSent가 항상 방출될 수 있도록 보장한다. -
request의 클라이언트가 null이 아니면, related navigables를 request의 클라이언트로 관련 navigable 가져오기를 수행한 결과로 둔다. 그렇지 않으면 related navigables를 빈 집합으로 둔다.
-
request로 네트워크 응답 본문 수집 가능 시 중단을 수행한다.
-
"
network.fetchError" 및 related navigables가 주어졌을 때 이벤트가 활성화된 세션 집합의 각 session에 대해:-
params를 session, "
network.fetchError", 및 request로 네트워크 이벤트 처리를 수행한 결과로 둔다. -
params의
errorText필드를, 요청이 중단되게 한 오류를 설명하는 구현 정의 문자열로 설정한다. -
단언: params는
network.FetchErrorParameters생성규칙과 일치한다. -
body를
params필드가 params로 설정된,network.FetchError생성규칙과 일치하는 맵으로 둔다. -
session 및 body로 이벤트를 방출한다.
-
7.5.6.4. network.responseCompleted 이벤트
- 이벤트 타입
-
network.ResponseCompleted= (method:"network.responseCompleted",params: network.ResponseCompletedParameters )network.ResponseCompletedParameters= { network.BaseParameters,response: network.ResponseData, }
이 이벤트는 전체 응답 본문이 수신된 후 방출된다.
-
redirect count를 request의 리다이렉트 횟수로 둔다.
-
단언: before request sent 맵[request]이 redirect count를 포함한다.
참고: 이는 모든 호출자가 이 단계 전에 request로 WebDriver BiDi before request sent 단계를 호출하도록 보장해야 함을 의미한다.
-
request의 클라이언트가 null이 아니면, related navigables를 request의 클라이언트로 관련 navigable 가져오기를 수행한 결과로 둔다. 그렇지 않으면 related navigables를 빈 집합으로 둔다.
-
request 및 response로 네트워크 응답 본문 수집 가능 시 수집을 수행한다.
-
sessions를 "
network.responseCompleted" 및 related navigables가 주어졌을 때의 이벤트가 활성화된 세션 집합으로 둔다. -
sessions의 각 session에 대해:
-
params를 session, "
network.responseCompleted", 및 request로 네트워크 이벤트 처리를 수행한 결과로 둔다. -
단언: params["
isBlocked"]는 false이다. -
response data를 response로 응답 데이터 가져오기를 수행한 결과로 둔다.
-
params의
response필드를 response data로 설정한다. -
단언: params는
network.ResponseCompletedParameters생성규칙과 일치한다. -
body를
params필드가 params로 설정된,network.ResponseCompleted생성규칙과 일치하는 맵으로 둔다. -
session 및 body로 이벤트를 방출한다.
-
7.5.6.5. network.responseStarted 이벤트
- 이벤트 타입
-
network.ResponseStarted= (method:"network.responseStarted",params: network.ResponseStartedParameters )network.ResponseStartedParameters= { network.BaseParameters,response: network.ResponseData, }
이 이벤트는 응답 헤더가 수신된 후, 본문이 완료되기 전에 방출된다.
-
redirect count를 request의 리다이렉트 횟수로 둔다.
-
단언: before request sent 맵[request]은 redirect count와 같다.
참고: 이는 모든 호출자가 이 단계 전에 request로 WebDriver BiDi before request sent 단계를 호출하도록 보장해야 함을 의미한다.
-
request의 클라이언트가 null이 아니면, related navigables를 request의 클라이언트로 관련 navigable 가져오기를 수행한 결과로 둔다. 그렇지 않으면 related navigables를 빈 집합으로 둔다.
-
response status를 "
incomplete"로 둔다. -
sessions를 "
network.responseStarted" 및 related navigables가 주어졌을 때의 이벤트가 활성화된 세션 집합으로 둔다. -
sessions의 각 session에 대해:
-
params를 session, "
network.responseStarted", 및 request로 네트워크 이벤트 처리를 수행한 결과로 둔다. -
response data를 response로 응답 데이터 가져오기를 수행한 결과로 둔다.
-
params의
response필드를 response data로 설정한다. -
단언: params는
network.ResponseStartedParameters생성규칙과 일치한다. -
body를
params필드가 params로 설정된,network.ResponseStarted생성규칙과 일치하는 맵으로 둔다. -
session 및 body로 이벤트를 방출한다.
-
params["
isBlocked"]가 true이면:-
blocked requests를 session의 차단된 요청 맵으로 둔다.
-
request id를 request의 request id로 둔다.
-
blocked requests[request id]를 (request, "
beforeRequestSent", response)로 설정한다. -
(response, status)를 «"
continue request"» 및 request id로 await한 결과로 둔다. -
status가 "
complete"이면 response status를 status로 설정한다. -
blocked requests[request id]를 제거한다.
-
-
-
(response, response status)를 반환한다.
7.6. script 모듈
script 모듈은 script realm 및 실행과 관련된 명령 및 이벤트를 포함한다.
7.6.1. 정의
ScriptCommand = (
script.AddPreloadScript //
script.CallFunction //
script.Disown //
script.Evaluate //
script.GetRealms //
script.RemovePreloadScript
)
ScriptResult= ( script.AddPreloadScriptResult / script.CallFunctionResult / script.DisownResult / script.EvaluateResult / script.GetRealmsResult / script.RemovePreloadScriptResult )ScriptEvent= ( script.Message // script.RealmCreated // script.RealmDestroyed )
7.6.2. 프리로드 스크립트
프리로드 스크립트는
작성자가 정의한 스크립트가 실행되기 전에, 새 Window가
생성될 때 실행되는 스크립트이다.
TODO: 이를 다른 종류의 realm 안의 스크립트로 확장한다.
BiDi 세션은 프리로드 스크립트 맵을
가진다. 이는 키가 UUID이고 값이
구조체인
맵이다. 해당 구조체는
문자열인 function declaration이라는 이름의 항목,
목록인 arguments라는 이름의 항목,
목록 또는 null인 contexts라는 이름의 항목,
문자열 또는 null인 sandbox라는 이름의 항목,
그리고 집합인
user contexts라는 이름의 항목을 가진다.
참고: 프리로드 스크립트 실행이 구문 오류 또는 런타임 예외로 인해 실패하면, 해당 스크립트가 실행되던 realm에서 [ECMAScript] 예외가 보고되고, 다른 프리로드 스크립트는 정상적으로 실행된다.
-
document를 environment settings의 관련 전역 객체의 연관된
Document로 둔다. -
navigable를 document의 navigable로 둔다.
-
user context를 navigable의 연관된 사용자 컨텍스트로 둔다.
-
user context id를 user context의 사용자 컨텍스트 id로 둔다.
-
활성 BiDi 세션의 각 session에 대해:
-
session의 프리로드 스크립트 맵의 값 안의 각 preload script에 대해:
-
preload script의
user contexts의 크기가 0이 아니면: -
preload script의
contexts가 null이 아니면:-
navigable id를 navigable의 최상위 traversable의 id로 둔다.
-
-
preload script의
sandbox가 null이 아니면, realm을 preload script의sandbox및 navigable로 샌드박스 realm 가져오기 또는 생성을 수행한 결과로 둔다. 그렇지 않으면 realm을 environment settings의 Realm 실행 컨텍스트의 Realm 컴포넌트로 둔다. -
exception reporting global을 environment settings의 Realm 실행 컨텍스트의 Realm 컴포넌트의 전역 객체로 둔다.
-
arguments를 preload script의
arguments로 둔다. -
deserialized arguments를 빈 목록으로 둔다.
-
arguments의 각 argument에 대해:
-
channel을 session, realm 및 argument로 채널 생성을 수행한 결과로 둔다.
-
channel을 deserialized arguments에 추가한다.
-
-
base URL을 environment settings의 API base URL로 둔다.
-
options를 기본 스크립트 fetch 옵션으로 둔다.
-
function declaration을 preload script의
function declaration으로 둔다. -
function body evaluation status를 function declaration, environment settings, base URL, 및 options로 함수 본문 평가를 수행한 결과로 둔다.
-
function body evaluation status가 abrupt completion이면, function body evaluation status.[[Value]]에 의해 주어진 예외를 exception reporting global에 대해 예외 보고한다.
-
function object를 function body evaluation status.[[Value]]로 둔다.
-
IsCallable(function object)이
false이면: -
environment settings로 스크립트 실행 준비를 수행한다.
-
evaluation status를 Call(function object, null, deserialized arguments)로 설정한다.
-
environment settings로 스크립트 실행 후 정리를 수행한다.
-
evaluation status가 abrupt completion이면, evaluation status.[[Value]]에 의해 주어진 예외를 exception reporting global에 대해 예외 보고한다.
-
-
7.6.3. 타입
7.6.3.1. script.Channel 타입
script.Channel = text;
script.Channel
타입은 원격 끝에서
로컬 끝으로 사용자 지정 메시지를 보내는 데 사용되는 특정 채널의 id를 나타낸다.
7.6.3.2. script.ChannelValue 타입
script.ChannelValue= {type:"channel",value: script.ChannelProperties, }script.ChannelProperties= {channel: script.Channel, ?serializationOptions: script.SerializationOptions, ?ownership: script.ResultOwnership, }
script.ChannelValue 타입은 원격 끝에서 로컬 끝으로
메시지를 보내는 함수로 역직렬화될 수 있는
ArgumentValue를 나타낸다.
session, realm 및 protocol value가 주어졌을 때 채널을 생성하려면:
-
channel properties를 protocol value["
value"]로 둔다. -
steps를 인수 message가 주어졌을 때의 다음 단계로 둔다:
-
current realm을 현재 Realm Record로 둔다.
-
session, current realm, channel properties 및 message로 스크립트 메시지를 방출한다.
-
-
CreateBuiltinFunction(steps, 1, "", « », realm)를 반환한다.
7.6.3.3. script.EvaluateResult 타입
script.EvaluateResult= ( script.EvaluateResultSuccess / script.EvaluateResultException )script.EvaluateResultSuccess= {type:"success",result: script.RemoteValue,realm: script.Realm }script.EvaluateResultException= {type:"exception",exceptionDetails: script.ExceptionDetailsrealm: script.Realm }
script.EvaluateResult 타입은 스크립트를 실행하는 명령의 반환값을 나타낸다.
script.EvaluateResultSuccess 변형은 스크립트가 정상적으로 완료된 경우에 사용되고,
script.EvaluateResultException 변형은 스크립트가 던져진 예외로 완료된 경우에 사용된다.
7.6.3.4. script.ExceptionDetails 타입
script.ExceptionDetails= {columnNumber: js-uint,exception: script.RemoteValue,lineNumber: js-uint,stackTrace: script.StackTrace,text: text, }
script.ExceptionDetails 타입은 JavaScript 예외를 나타낸다.
realm, completion record record, ownership type 및 session이 주어졌을 때 예외 상세정보 가져오기:
-
단언: record.[[Type]]은
throw이다. -
text를 record가 나타내는 오류에 대한 구현 정의 텍스트 설명으로 둔다.
TODO: 여기의 요구사항을 더 엄격하게 만든다. 사람들은 아마 이 데이터를 정규식 같은 똑같이 나쁜 것으로 파싱하려 할 것이다.
-
serialization options를 각 필드가 해당 기본값으로 설정된
script.SerializationOptions생성규칙과 일치하는 맵으로 둔다. -
exception을 record.[[Value]], serialization options, ownership type, serialization internal map으로서의 새 맵, realm 및 session으로 원격 값으로 직렬화를 수행한 결과로 둔다.
-
stack trace를 record가 주어졌을 때의 예외에 대한 스택 추적으로 둔다.
-
stack trace의 크기가 1 이상이면, line number를 stack trace[0] 안의
lineNumber필드 값으로 두고, column number를 stack trace[0]의columnNumber필드 값으로 둔다. 그렇지 않으면 line number 및 column number를 0으로 둔다. -
exception details를
text필드가 text로 설정되고,exception필드가 exception으로 설정되고,lineNumber필드가 line number로 설정되고,columnNumber필드가 column number로 설정되고,stackTrace필드가 stack trace로 설정된,script.ExceptionDetails생성규칙과 일치하는 맵으로 둔다. -
exception details를 반환한다.
7.6.3.5. script.Handle 타입
script.Handle = text;
script.Handle 타입은 ECMAScript 런타임이 소유한 객체에 대한 핸들을 나타낸다.
이 핸들은 특정 Realm 안에서만 유효하다.
각 ECMAScript Realm은 대응하는 핸들 객체 맵을 가진다. 이는 핸들 id에서 해당 객체로 가는 strong 맵이다.
7.6.3.6. script.InternalId 타입
script.InternalId = text;
script.InternalId 타입은 직렬화 중 이전에 직렬화된
script.RemoteValue의 id를 나타낸다.
7.6.3.7. script.LocalValue 타입
script.LocalValue= ( script.RemoteReference / script.PrimitiveProtocolValue / script.ChannelValue / script.ArrayLocalValue / { script.DateLocalValue } / script.MapLocalValue / script.ObjectLocalValue / { script.RegExpLocalValue } / script.SetLocalValue )script.ListLocalValue= [*script.LocalValue];script.ArrayLocalValue= {type:"array",value: script.ListLocalValue, }script.DateLocalValue= (type:"date",value: text )script.MappingLocalValue= [*[(script.LocalValue / text), script.LocalValue]];script.MapLocalValue= {type:"map",value: script.MappingLocalValue, }script.ObjectLocalValue= {type:"object",value: script.MappingLocalValue, }script.RegExpValue= {pattern: text, ?flags: text, }script.RegExpLocalValue= (type:"regexp",value: script.RegExpValue, )script.SetLocalValue= {type:"set",value: script.ListLocalValue, }
script.LocalValue
타입은 ECMAScript로 역직렬화될 수 있는 값을 나타낸다. 이는 원시 값과 비원시 값뿐만 아니라
원격 참조 및
채널도 포함한다.
serialized key-value list, realm 및 session이 주어졌을 때 키-값 목록 역직렬화:
-
deserialized key-value list를 새 목록으로 둔다.
-
serialized key-value list 안의 각 serialized key-value에 대해:
-
serialized key-value의 크기가 2가 아니면, error를 error code invalid argument와 함께 반환한다.
-
serialized key를 serialized key-value[0]으로 둔다.
-
serialized key가
string이면, deserialized key를 serialized key로 둔다. -
그렇지 않으면 deserialized key를 serialized key, realm 및 session로 로컬 값 역직렬화를 수행하도록 시도한 결과로 둔다.
-
serialized value를 serialized key-value[1]로 둔다.
-
deserialized value를 serialized value, realm 및 session가 주어졌을 때 로컬 값 역직렬화를 수행하도록 시도한 결과로 둔다.
-
CreateArrayFromList(«deserialized key, deserialized value»)를 deserialized key-value list에 추가한다.
-
-
success를 데이터 deserialized key-value list와 함께 반환한다.
serialized value list, realm 및 session이 주어졌을 때 값 목록 역직렬화:
local protocol value, realm 및 session이 주어졌을 때 로컬 값 역직렬화:
-
local protocol value가 script.RemoteReference 생성규칙과 일치하면, 주어진 local protocol value, realm 및 session의 원격 참조 역직렬화를 반환한다.
-
local protocol value가 script.PrimitiveProtocolValue 생성규칙과 일치하면, local protocol value로 원시 프로토콜 값 역직렬화를 수행한 결과를 반환한다.
-
local protocol value가
script.ChannelValue생성규칙과 일치하면, session, realm 및 local protocol value로 채널 생성을 수행한 결과를 반환한다. -
type을 local protocol value의
type필드 값으로 두거나, 그런 필드가 없으면 undefined로 둔다. -
value를 local protocol value의
value필드 값으로 두거나, 그런 필드가 없으면 undefined로 둔다. -
다음 조건 및 연관된 단계 목록에서, 연관 조건이 true인 첫 번째 단계 집합을 실행한다:
- type이 문자열 "
array"인 경우 -
-
deserialized value list를 value, realm 및 session이 주어졌을 때 값 목록 역직렬화를 수행하도록 시도한 결과로 둔다.
-
success를 데이터 CreateArrayFromList(deserialized value list)와 함께 반환한다.
-
- type이 문자열 "
date"인 경우 -
-
value가 Date Time String Format과 일치하지 않으면, error를 error code invalid argument와 함께 반환한다.
-
단언: date result는 abrupt completion이 아니다.
-
success를 데이터 date result와 함께 반환한다.
-
- type이 문자열 "
map"인 경우 -
-
deserialized key-value list를 value, realm 및 session로 키-값 목록 역직렬화를 수행하도록 시도한 결과로 둔다.
-
iterable을 CreateArrayFromList(deserialized key-value list)로 둔다
-
- type이 문자열 "
object"인 경우 -
-
deserialized key-value list를 value, realm 및 session로 키-값 목록 역직렬화를 수행하도록 시도한 결과로 둔다.
-
iterable을 CreateArrayFromList(deserialized key-value list)로 둔다
-
success를 데이터 Object.fromEntries(iterable)와 함께 반환한다.
-
- type이 문자열 "
regexp"인 경우 -
-
pattern을 local protocol value의
pattern필드 값으로 둔다. -
flags를 local protocol value의
flags필드 값으로 두거나, 그런 필드가 없으면 undefined로 둔다. -
regex_result를 Regexp(pattern, flags)로 둔다. 이것이 예외를 던지면, error를 error code invalid argument와 함께 반환한다.
-
success를 데이터 regex_result와 함께 반환한다.
-
- type이 문자열 "
set"인 경우 -
-
deserialized value list를 value, realm 및 session이 주어졌을 때 값 목록 역직렬화를 수행하도록 시도한 결과로 둔다.
-
iterable을 CreateArrayFromList(deserialized key-value list)로 둔다
-
success를 데이터 Set object(iterable)와 함께 반환한다.
-
- 그 외의 경우
- error를 error code invalid argument와 함께 반환한다.
- type이 문자열 "
7.6.3.8. script.PreloadScript 타입
script.PreloadScript = text;
script.PreloadScript 타입은 렐름 생성 시 실행될 스크립트에 대한 핸들을 나타낸다.
7.6.3.9. script.Realm 타입
script.Realm = text;
각 렐름에는 그 렐름을 고유하게 식별하는 문자열인 연관된 realm id가 있다. 이는 렐름이 생성될 때 암묵적으로 설정된다.
렐름에 대한 realm id는 불투명하며, handle object map 안의 해당 전역 객체의 핸들 id에서 파생될 수 없어야 하고, 관련되는 경우 어떤 navigable의 navigable id에서도 파생될 수 없어야 한다.
참고: 이는 사용자가 서로 다른 id 사이의 구현별 관계에 의존하지 않도록 보장하기 위한 것이다.
7.6.3.10. script.PrimitiveProtocolValue 타입
script.PrimitiveProtocolValue= ( script.UndefinedValue / script.NullValue / script.StringValue / script.NumberValue / script.BooleanValue / script.BigIntValue )script.UndefinedValue= {type:"undefined", }script.NullValue= {type:"null", }script.StringValue= {type:"string",value: text, }script.SpecialNumber="NaN"/"-0"/"Infinity"/"-Infinity";script.NumberValue= {type:"number",value: number / script.SpecialNumber, }script.BooleanValue= {type:"boolean",value: bool, }script.BigIntValue= {type:"bigint",value: text, }
script.PrimitiveProtocolValue는 참조가 아니라 값으로만 표현될 수 있는 값을 나타낸다.
value가 주어졌을 때 원시 프로토콜 값 직렬화:
-
remote value를 undefined로 둔다.
-
다음 조건 및 연관된 단계 목록에서, 연관 조건이 true인 첫 번째 단계 집합이 있으면 실행한다:
- Type(value)이 undefined인 경우
- remote value를
로컬 끝 정의의script.UndefinedValue생성규칙과 일치하는 맵으로 둔다. - Type(value)이 Null인 경우
- remote value를
로컬 끝 정의의script.NullValue생성규칙과 일치하는 맵으로 둔다. - Type(value)이 String인 경우
-
remote value를
로컬 끝 정의의script.StringValue생성규칙과 일치하고value속성이 value로 설정된 맵으로 둔다. - Type(value)이 Number인 경우
- Type(value)이 Boolean인 경우
- remote value를
로컬 끝 정의의script.BooleanValue생성규칙과 일치하고value속성이 value로 설정된 맵으로 둔다. - Type(value)이 BigInt인 경우
- remote value를
로컬 끝 정의의script.BigIntValue생성규칙과 일치하고value속성이 value에 대해 ToString 연산을 실행한 결과로 설정된 맵으로 둔다.
-
remote value를 반환한다
primitive protocol value가 주어졌을 때 원시 프로토콜 값 역직렬화:
-
type을 primitive protocol value의
type필드 값으로 둔다. -
value를 undefined로 둔다.
-
primitive protocol value에
value필드가 있으면:-
value를 primitive protocol value의
value필드 값으로 둔다.
-
-
다음 조건 및 연관된 단계 목록에서, 연관 조건이 true인 첫 번째 단계 집합을 실행한다:
- type이 문자열 "
undefined"인 경우 - 데이터 undefined와 함께 성공을 반환한다.
- type이 문자열 "
null"인 경우 - 데이터 null과 함께 성공을 반환한다.
- type이 문자열 "
string"인 경우 - 데이터 value와 함께 성공을 반환한다.
- type이 문자열 "
number"인 경우 -
-
단언: Type(value)은 String이다.
-
value가 문자열 "
NaN"이면, 데이터 NaN과 함께 성공을 반환한다. -
number_result를 StringToNumber(value)로 둔다.
-
number_result가 NaN이면, 오류를 오류 코드 invalid argument와 함께 반환한다
-
데이터 number_result와 함께 성공을 반환한다.
- type이 문자열 "
boolean"인 경우 - 데이터 value와 함께 성공을 반환한다.
- type이 문자열 "
bigint"인 경우 -
-
bigint_result를 StringToBigInt(value)로 둔다.
-
bigint_result가 undefined이면, 오류를 오류 코드 invalid argument와 함께 반환한다
-
데이터 bigint_result와 함께 성공을 반환한다.
-
- type이 문자열 "
-
오류를 오류 코드 invalid argument와 함께 반환한다
7.6.3.11. script.RealmInfo 타입
script.RealmInfo= ( script.WindowRealmInfo / script.DedicatedWorkerRealmInfo / script.SharedWorkerRealmInfo / script.ServiceWorkerRealmInfo / script.WorkerRealmInfo / script.PaintWorkletRealmInfo / script.AudioWorkletRealmInfo / script.WorkletRealmInfo )script.BaseRealmInfo= (realm: script.Realm,origin: text )script.WindowRealmInfo= { script.BaseRealmInfo,type:"window",context: browsingContext.BrowsingContext, ?userContext: browser.UserContext, ?sandbox: text }script.DedicatedWorkerRealmInfo= { script.BaseRealmInfo,type:"dedicated-worker",owners: [script.Realm] }script.SharedWorkerRealmInfo= { script.BaseRealmInfo,type:"shared-worker"}script.ServiceWorkerRealmInfo= { script.BaseRealmInfo,type:"service-worker"}script.WorkerRealmInfo= { script.BaseRealmInfo,type:"worker"}script.PaintWorkletRealmInfo= { script.BaseRealmInfo,type:"paint-worklet"}script.AudioWorkletRealmInfo= { script.BaseRealmInfo,type:"audio-worklet"}script.WorkletRealmInfo= { script.BaseRealmInfo,type:"worklet"}
참고:
script.RealmInfo
변형과 script.RealmType의 값 사이에는 1:1 관계가 있다.
script.RealmInfo 타입은 렐름의 속성을 나타낸다.
-
global object를 realm의 전역 객체로 둔다.
-
global object를 unwrapped global object로 둔다.
-
global object가
Window객체가 아니면,null을 반환한다. -
document를 global object의 래핑된
Window의 연관된Document로 둔다. -
document의 node navigable을 반환한다.
-
단언: global object는
WorkerGlobalScope객체이다. -
owners를 빈 목록으로 둔다.
-
global object의 연관된 owner set 안의 각 owner에 대해:
-
owner environment settings를 owner의 관련 설정 객체로 둔다.
-
owner realm info를 주어진 owner environment settings로 realm info 가져오기의 결과로 둔다.
-
owner realm info가 null이면, 계속한다.
-
owner realm info["
id"]를 owners에 추가한다.
-
-
owners를 반환한다.
-
realm을 environment settings의 realm 실행 컨텍스트의 Realm 컴포넌트로 둔다.
-
realm id를 realm에 대한 realm id로 둔다.
-
origin을 environment settings의 origin가 주어졌을 때의 출처의 직렬화로 둔다.
-
global object를 environment settings가 지정하는 전역 객체로 둔다
-
처음 일치하는 조건 아래의 단계를 실행한다:
- global object가
Window객체인 경우 -
-
document를 environment settings의 관련 전역 객체의 연관된
Document로 둔다. -
navigable를 document의 node navigable로 둔다.
-
navigable이 null이면, null을 반환한다.
-
navigable id를 navigable에 대한 navigable id로 둔다.
-
user context id를 navigable의 연관된 사용자 컨텍스트의 user context id로 둔다
-
realm info를
realm필드가 realm id로 설정되고,origin필드가 origin으로 설정되고,context필드가 navigable id로 설정되며userContext필드가 user context id로 설정된,script.WindowRealmInfo생성규칙과 일치하는 맵으로 둔다.
-
- global object가
SandboxWindowProxy객체인 경우 -
TODO: 이것이 샌드박스를 처리하기 위한 올바른 표현인지 명확하지 않다.
-
document를 global object의 래핑된
Window의 연관된Document로 둔다. -
navigable를 document의 node navigable로 둔다.
-
navigable가 null이면, null을 반환한다.
-
navigable id를 navigable에 대한 navigable id로 둔다.
-
user context id를 navigable의 연관된 사용자 컨텍스트의 user context id로 둔다
-
sandbox name을 realm이 주어졌을 때 샌드박스 이름 가져오기의 결과로 둔다.
-
단언: sandbox name은 null이 아니다.
-
realm info를
realm필드가 realm id로 설정되고,origin필드가 origin으로 설정되고,context필드가 navigable id로 설정되고,userContext필드가 user context id로 설정되며,sandbox필드가 sandbox name으로 설정된,script.WindowRealmInfo생성규칙과 일치하는 맵으로 둔다.
-
- global object가
DedicatedWorkerGlobalScope객체인 경우 -
-
owners를 global object가 주어졌을 때 worker의 소유자 가져오기의 결과로 둔다.
-
단언: owners는 정확히 하나의 항목을 가진다.
-
realm info를
realm필드가 realm id로 설정되고,origin필드가 origin으로 설정되며,owners필드가 owners로 설정된,script.DedicatedWorkerRealmInfo생성규칙과 일치하는 맵으로 둔다.
-
- global object가
SharedWorkerGlobalScope객체인 경우 -
-
realm info를
realm필드가 realm id로 설정되고,origin필드가 origin으로 설정된,script.SharedWorkerRealmInfo생성규칙과 일치하는 맵으로 둔다.
-
- global object가
ServiceWorkerGlobalScope객체인 경우 -
-
realm info를
realm필드가 realm id로 설정되고,origin필드가 origin으로 설정된,script.ServiceWorkerRealmInfo생성규칙과 일치하는 맵으로 둔다.
-
- global object가
WorkerGlobalScope객체인 경우 -
-
realm info를
realm필드가 realm id로 설정되고,origin필드가 origin으로 설정된,script.WorkerRealmInfo생성규칙과 일치하는 맵으로 둔다.
-
- global object가
PaintWorkletGlobalScope객체인 경우 -
-
realm info를
realm필드가 realm id로 설정되고,origin필드가 origin으로 설정된,script.PaintWorkletRealmInfo생성규칙과 일치하는 맵으로 둔다.
-
- global object가
AudioWorkletGlobalScope객체인 경우 -
-
realm info를
realm필드가 realm id로 설정되고,origin필드가 origin으로 설정된,script.AudioWorkletRealmInfo생성규칙과 일치하는 맵으로 둔다.
-
- global object가
WorkletGlobalScope객체인 경우 -
-
realm info를
realm필드가 realm id로 설정되고,origin필드가 origin으로 설정된,script.WorkletRealmInfo생성규칙과 일치하는 맵으로 둔다.
-
- 그 외의 경우:
-
-
realm info를 null로 둔다.
-
- global object가
-
realm info를 반환한다
참고: 이 명세의 향후 변형은
"-"로 분할한 뒤의 타입 이름의 마지막 컴포넌트가
WorkerGlobalScope를
구현하는 전역에 대해 항상 "worker"이고,
WorkletGlobalScope를
구현하는 전역에 대해 "worklet"이라는 불변식을 유지할 것이다.
7.6.3.12. script.RealmType 타입
script.RealmType="window"/"dedicated-worker"/"shared-worker"/"service-worker"/"worker"/"paint-worklet"/"audio-worklet"/"worklet"
script.RealmType 타입은 서로 다른 Realm 타입을 나타낸다.
7.6.3.13. script.RemoteReference 타입
script.RemoteReference= ( script.SharedReference / script.RemoteObjectReference )script.SharedReference= {sharedId: script.SharedId ?handle: script.Handle, Extensible }script.RemoteObjectReference= {handle: script.Handle, ?sharedId: script.SharedId Extensible }
script.RemoteReference
타입은 주어진 Realm의
handle object map 안의
기존 ECMAScript 객체에 대한 원격 참조를
나타내는 script.RemoteObjectReference이거나,
노드에
대한 참조를 나타내는
script.SharedReference이다.
"stale object reference" 경우를 처리한다.
참고: 제공된 참조가
handle과
sharedId를 모두 가지는 경우, 알고리즘은 handle을 무시하고
sharedId만 따른다.
-
remote reference가
script.RemoteReference생성규칙과 일치한다고 단언한다. -
remote reference가
script.SharedReference생성규칙과 일치하면, remote reference, realm 및 session으로 shared reference 역직렬화를 반환한다. -
remote reference 및 realm으로 remote object reference 역직렬화를 반환한다.
-
handle id를 remote object reference의
handle필드 값으로 둔다. -
handle map을 realm의 handle object map으로 둔다
-
handle map이 handle id를 포함하지 않으면, 오류를 오류 코드 no such handle와 함께 반환한다.
-
데이터 handle map[handle id]와 함께 성공을 반환한다.
-
shared reference가
script.SharedReference생성규칙과 일치한다고 단언한다. -
navigable을 realm으로 navigable 가져오기로 둔다.
-
navigable이
null이면, 오류를 오류 코드 no such node와 함께 반환한다.참고: 이는 realm이 Window 전역이 아닐 때 발생한다.
-
shared id를 shared reference의
sharedId필드 값으로 둔다. -
node가
null이면, 오류를 오류 코드 no such node와 함께 반환한다. -
environment settings를 realm 실행 컨텍스트의 Realm 컴포넌트가 realm인 환경 설정 객체로 둔다.
-
node의 노드 문서의 origin이 environment settings의 origin과 same origin domain이 아니면 오류를 오류 코드 no such node와 함께 반환한다.
참고: 이는 WebDriver-BiDi가 달리 스크립트 접근을 허용하지 않는 realm 사이에서 객체를 전달하는 데 사용될 수 없도록 보장한다.
-
realm global object를 realm의 전역 객체로 둔다.
-
realm global object가
SandboxWindowProxy객체이면, node를 realm에서 node를 래핑하는SandboxProxy로 설정한다. -
데이터 node와 함께 성공을 반환한다.
7.6.3.14. script.RemoteValue 타입
script.RemoteValue= ( script.PrimitiveProtocolValue / script.SymbolRemoteValue / script.ArrayRemoteValue / script.ObjectRemoteValue / script.FunctionRemoteValue / script.RegExpRemoteValue / script.DateRemoteValue / script.MapRemoteValue / script.SetRemoteValue / script.WeakMapRemoteValue / script.WeakSetRemoteValue / script.GeneratorRemoteValue / script.ErrorRemoteValue / script.ProxyRemoteValue / script.PromiseRemoteValue / script.TypedArrayRemoteValue / script.ArrayBufferRemoteValue / script.NodeListRemoteValue / script.HTMLCollectionRemoteValue / script.NodeRemoteValue / script.WindowProxyRemoteValue )script.ListRemoteValue= [*script.RemoteValue];script.MappingRemoteValue= [*[(script.RemoteValue / text), script.RemoteValue]];script.SymbolRemoteValue= {type:"symbol", ?handle: script.Handle, ?internalId: script.InternalId, }script.ArrayRemoteValue= {type:"array", ?handle: script.Handle, ?internalId: script.InternalId, ?value: script.ListRemoteValue, }script.ObjectRemoteValue= {type:"object", ?handle: script.Handle, ?internalId: script.InternalId, ?value: script.MappingRemoteValue, }script.FunctionRemoteValue= {type:"function", ?handle: script.Handle, ?internalId: script.InternalId, }script.RegExpRemoteValue= { script.RegExpLocalValue, ?handle: script.Handle, ?internalId: script.InternalId, }script.DateRemoteValue= { script.DateLocalValue, ?handle: script.Handle, ?internalId: script.InternalId, }script.MapRemoteValue= {type:"map", ?handle: script.Handle, ?internalId: script.InternalId, ?value: script.MappingRemoteValue, }script.SetRemoteValue= {type:"set", ?handle: script.Handle, ?internalId: script.InternalId, ?value: script.ListRemoteValue }script.WeakMapRemoteValue= {type:"weakmap", ?handle: script.Handle, ?internalId: script.InternalId, }script.WeakSetRemoteValue= {type:"weakset", ?handle: script.Handle, ?internalId: script.InternalId, }script.GeneratorRemoteValue= {type:"generator", ?handle: script.Handle, ?internalId: script.InternalId, }script.ErrorRemoteValue= {type:"error", ?handle: script.Handle, ?internalId: script.InternalId, }script.ProxyRemoteValue= {type:"proxy", ?handle: script.Handle, ?internalId: script.InternalId, }script.PromiseRemoteValue= {type:"promise", ?handle: script.Handle, ?internalId: script.InternalId, }script.TypedArrayRemoteValue= {type:"typedarray", ?handle: script.Handle, ?internalId: script.InternalId, }script.ArrayBufferRemoteValue= {type:"arraybuffer", ?handle: script.Handle, ?internalId: script.InternalId, }script.NodeListRemoteValue= {type:"nodelist", ?handle: script.Handle, ?internalId: script.InternalId, ?value: script.ListRemoteValue, }script.HTMLCollectionRemoteValue= {type:"htmlcollection", ?handle: script.Handle, ?internalId: script.InternalId, ?value: script.ListRemoteValue, }script.NodeRemoteValue= {type:"node", ?sharedId: script.SharedId, ?handle: script.Handle, ?internalId: script.InternalId, ?value: script.NodeProperties, }script.NodeProperties= {nodeType: js-uint,childNodeCount: js-uint, ?attributes: {*text => text}, ?children: [*script.NodeRemoteValue], ?localName: text, ?mode:"open"/"closed", ?namespaceURI: text, ?nodeValue: text, ?shadowRoot: script.NodeRemoteValue / null, }script.WindowProxyRemoteValue= {type:"window",value: script.WindowProxyProperties, ?handle: script.Handle, ?internalId: script.InternalId }script.WindowProxyProperties= {context: browsingContext.BrowsingContext }
WindowProxy도 Node와 유사한 스타일로 속성을 가져야 하는가?
String / Number / 등 래퍼 객체를 특별히 처리할 것인가?
ECMAScript 런타임에서 접근 가능한 값은
script.RemoteValue로 지정되는 미러 객체로 표현된다. 값의 타입은
type 속성에 지정된다. JSON으로 표현 가능한
원시 값의 경우, 이는 값을 value 속성에 포함한다. JSON으로
표현할 수 없는 원시 값의 경우, value 속성은
값의 문자열 표현을 포함한다.
원시 객체가 아닌 객체의 경우, handle 속성이 존재하면
객체에 대한 고유한 문자열 핸들을 포함한다. 핸들은 각 직렬화마다 고유하다.
원격 끝은 대응하는 핸들이 있는 객체를, 해당 핸들로
script.disown이 호출되거나 realm 자체가 버려질 때까지
(예: 탐색으로 인해) 살아 있게 유지한다.
일부 비원시 타입의 경우, value 속성은
ECMAScript 객체 안의 데이터 표현을 포함한다. 컨테이너 타입의 경우 이는
추가적인 script.RemoteValue 인스턴스를 포함할 수 있다.
객체가 중복 객체인 경우, 즉 현재 script.RemoteValue 안에서
객체가 이미 직렬화되었거나, 아마도 순환의 일부로 직렬화되었거나, 또는
최대 직렬화 깊이에 도달한 경우에는 value 속성이 null이거나 생략될 수 있다.
동일한 script.RemoteValue 안에 중복 객체가 있는 경우,
값은 원격 값 중 하나에만 제공되며, 지정된 직렬화에서 중복 객체 모두에는
ECMAScript 객체마다 고유한 internalId가 제공된다.
노드도
script.RemoteValue 인스턴스로 표현된다.
이들은 value 속성에 노드의 부분 직렬화를 가진다.
참고: 미러 객체는 원본 객체를 런타임에서 살아 있게 유지하지 않는다. 런타임에서 객체가 버려지면, 프로토콜을 통해 그 객체에 접근하려는 이후의 시도는 오류가 된다.
-
ownership type이 "
none"과 같으면,null을 반환한다. -
handle id를 object에 대한 새롭고 고유한 문자열 핸들로 둔다.
-
handle map을 realm의 handle object map으로 둔다
-
handle map[handle id]를 object로 설정한다.
-
handle id를 결과로 반환한다.
-
node를 unwrapped node로 둔다.
-
node가
Node를 구현하지 않으면, null을 반환한다. -
navigable을 node의 node navigable로 둔다.
-
navigable이 null이면, null을 반환한다.
-
session, navigable 및 node로 노드 참조 가져오기 또는 생성을 반환한다.
-
serialization internal map이 object를 포함하지 않으면, serialization internal map[object]를 remote value로 설정한다.
-
그렇지 않으면, 다음 단계를 실행한다:
-
previously serialized remote value를 serialization internal map[object]로 둔다.
-
previously serialized remote value에
internalId필드가 없으면, 다음 단계를 실행한다:-
internal id를 진정한 난수 또는 의사 난수를 기반으로 한 UUID의 문자열 표현으로 둔다.
-
previously serialized remote value의
internalId필드를 internal id로 설정한다.
-
-
remote value의
internalId필드를 previously serialized remote value 안의internalId필드로 설정한다.
-
value, serialization options, ownership type, serialization internal map, realm 및 session이 주어졌을 때 remote value로 직렬화하려면:
-
remote value를 value가 주어졌을 때 primitive protocol value 직렬화의 결과로 둔다.
-
remote value가 undefined가 아니면, remote value를 반환한다.
-
handle id를 realm, ownership type 및 value로 객체에 대한 핸들로 둔다.
-
ownership type을 "
none"으로 설정한다. -
known object를 value가 serialization internal map 안에 있으면
true, 그렇지 않으면false로 둔다. -
다음 조건과 관련 단계의 목록에서, 관련 조건이 참인 첫 번째 단계 집합을 실행한다:
- Type(value) is Symbol
- remote value를
로컬 끝 정의안의script.SymbolRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. - IsArray(value)
- remote value를
session,
script.ArrayRemoteValue, handle id, known object, value, serialization options, ownership type, serialization internal map, realm, 및 session으로 Array-like 직렬화한 것으로 둔다. - IsRegExp(value)
- value has a [[DateValue]] internal slot.
-
-
serialized를 Date.prototype.toISOString을 value에 대해 Call한 것으로 설정한다.
-
단언: serialized는 throw completion이 아니다.
-
remote value를
로컬 끝 정의안의script.DateRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략하며, 값은 serialized로 설정한다.
-
- value has a [[MapData]] internal slot
-
-
remote value를
로컬 끝 정의안의script.MapRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. -
serialization internal map, remote value 및 value로 필요한 경우 internal id 설정을 수행한다.
-
serialized를 null로 둔다.
-
known object가
false이고, serialization options["maxObjectDepth"]가 0이 아니면, 다음 단계를 실행한다:-
serialized를 CreateMapIterator(value, key+value), serialization options, ownership type, serialization internal map, realm, 및 session으로 mapping으로 직렬화한 결과로 둔다.
-
-
serialized가 null이 아니면, remote value의
value필드를 serialized로 설정한다.
-
- value has a [[SetData]] internal slot
-
-
remote value를
로컬 끝 정의안의script.SetRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. -
serialization internal map, remote value 및 value로 필요한 경우 internal id 설정을 수행한다.
-
serialized를 null로 둔다.
-
known object가
false이고, serialization options["maxObjectDepth"]가 0이 아니면, 다음 단계를 실행한다:-
serialized를 CreateSetIterator(value, value), serialization options, ownership type, serialization internal map, realm, 및 session으로 list로 직렬화한 결과로 둔다.
-
-
serialized가 null이 아니면, remote value의
value필드를 serialized로 설정한다.
-
- value has a [[WeakMapData]] internal slot
- remote value를
로컬 끝 정의안의script.WeakMapRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. - value has a [[WeakSetData]] internal slot
- remote value를
로컬 끝 정의안의script.WeakSetRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. - value has a [[GeneratorState]] internal slot or [[AsyncGeneratorState]] internal slot
- remote value를
로컬 끝 정의안의script.GeneratorRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. - value has an [[ErrorData]] internal slot
- remote value를
로컬 끝 정의안의script.ErrorRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. - value has a [[ProxyHandler]] internal slot and a [[ProxyTarget]] internal slot
- remote value를
로컬 끝 정의안의script.ProxyRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. - IsPromise(value)
- remote value를
로컬 끝 정의안의script.PromiseRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. - value has a [[TypedArrayName]] internal slot
- remote value를
로컬 끝 정의안의script.TypedArrayRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. - value has an [[ArrayBufferData]] internal slot
- remote value를
로컬 끝 정의안의script.ArrayBufferRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. - value is a platform object that implements
NodeList - remote value를
script.NodeListRemoteValue,handle id, known object, value, serialization options, ownership type, serialization internal map, realm, 및 session으로 Array-like 직렬화한 것으로 둔다. - value is a platform object that implements
HTMLCollection - remote value를
script.HTMLCollectionRemoteValue, handle id, known object, value, serialization options, ownership type, known object, serialization internal map, realm, 및 session으로 Array-like 직렬화한 것으로 둔다. - value is a platform object that implements
Node -
-
shared id를 value 및 session으로 노드에 대한 shared id 가져오기로 둔다.
-
remote value를
로컬 끝 정의안의script.NodeRemoteValue생성규칙과 일치하는 맵으로 두며,sharedId속성은 shared id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략하며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. -
serialization internal map, remote value 및 value로 필요한 경우 internal id 설정을 수행한다.
-
serialized를 null로 둔다.
-
known object가
false이면, 다음 단계를 실행한다:-
serialized를 새 맵으로 둔다.
-
serialized["
nodeType"]를 Get(value, "nodeType")으로 설정한다. -
node value를 Get(value, "nodeValue")로 설정한다.
-
node value가 null이 아니면 serialized["
nodeValue"]를 node value로 설정한다. -
serialized["
childNodeCount"]를 child node count로 설정한다. -
serialization options["
maxDomDepth"]가 0과 같거나, 또는 value가ShadowRoot를 구현하고 serialization options["includeShadowTree"]가 "none"이거나, 또는 serialization options["includeShadowTree"]가 "open"이고 value의 mode가 "closed"이면, children을 null로 둔다.그렇지 않으면, children을 빈 목록으로 두고, value의 자식 안의 각 노드 child에 대해:
-
child serialization options를 serialization options의 클론으로 둔다.
-
child serialization options["
maxDomDepth"]가 null이 아니면, child serialization options["maxDomDepth"]를 child serialization options["maxDomDepth"] - 1로 설정한다. -
serialized를 child, child serialization options, ownership type, serialization internal map, realm, 및 session으로 remote value로 직렬화한 결과로 둔다.
-
serialized를 children에 추가한다.
-
-
children이 null이 아니면, serialized["
children"]를 children으로 설정한다. -
value가
Element를 구현하면:-
attributes를 새 맵으로 둔다.
-
value의 속성 목록 안의 각 attribute에 대해:
-
name을 attribute의 qualified name으로 둔다
-
value를 attribute의 값으로 둔다.
-
attributes[name]를 value로 설정한다
-
-
serialized["
attributes"]를 attributes로 설정한다. -
shadow root를 value의 shadow root로 둔다.
-
shadow root가 null이면, serialized shadow를 null로 둔다. 그렇지 않으면 다음 하위 단계를 실행한다:
-
serialized shadow를 shadow root, serialization options, ownership type, serialization internal map, realm, 및 session으로 remote value로 직렬화한 결과로 둔다.
-
-
serialized["
shadowRoot"]를 serialized shadow로 설정한다.
-
-
value가
ShadowRoot를 구현하면, serialized["mode"]를 value의 mode로 설정한다.
-
-
serialized가 null이 아니면, remote value의
value필드를 serialized로 설정한다.
-
- value is a platform object that implements
WindowProxy -
-
window를 value의 [[WindowProxy]] internal slot 값으로 둔다.
-
navigable를 window의 navigable로 둔다.
-
navigable id를 navigable에 대한 navigable id로 둔다.
-
serialized를
로컬 끝 정의안의script.WindowProxyProperties생성규칙과 일치하는 맵으로 두며,context속성은 navigable id로 설정한다. -
remote value를
로컬 끝 정의안의script.WindowProxyRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략하며,value속성은 serialized로 설정한다.
-
- value is a platform object
- 1. remote value를
로컬 끝 정의안의script.ObjectRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. - IsCallable(value)
- remote value를
로컬 끝 정의안의script.FunctionRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. - 그 외:
-
-
remote value를
로컬 끝 정의안의script.ObjectRemoteValue생성규칙과 일치하는 맵으로 두며,handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. -
serialization internal map, remote value 및 value로 필요한 경우 internal id 설정을 수행한다.
-
serialized를 null로 둔다.
-
known object가
false이고, serialization options["maxObjectDepth"]가 0이 아니면, 다음 단계를 실행한다:-
serialized를 EnumerableOwnPropertyNames(value, key+value), serialization options, ownership type, serialization internal map, realm, 및 session으로 mapping으로 직렬화한 결과로 둔다.
-
-
serialized가 null이 아니면, remote value의
value필드를 serialized로 설정한다.
-
remote value를 반환한다
children과
자식 노드는 서로 다른 것이다. childNodeCount가
childNodes를 참조해야 하거나, childrenCount로 이름이 바뀌어야 한다.
-
remote value를 production과 일치하는 맵으로 두며,
handle속성은 handle id가 null이 아니면 그것으로 설정하고, 그렇지 않으면 생략한다. -
serialization internal map, remote value 및 value로 필요한 경우 internal id 설정을 수행한다.
-
known object가
false이고, serialization options["maxObjectDepth"]가 0이 아니면:-
serialized를 CreateArrayIterator(value, value), serialization options, ownership type, serialization internal map, realm, 및 session으로 list로 직렬화한 결과로 둔다.
-
serialized가 null이 아니면, remote value의
value필드를 serialized로 설정한다.
-
-
remote value를 반환한다
-
serialization options["
maxObjectDepth"]가 null이 아니면, 단언: serialization options["maxObjectDepth"]는 0보다 크다. -
serialized를 새 목록으로 둔다.
-
GetIterator(iterable, sync)의 IteratorToList 안의 각 child value에 대해:
-
child serialization options를 serialization options의 클론으로 둔다.
-
child serialization options["
maxObjectDepth"]가 null이 아니면, child serialization options["maxObjectDepth"]를 child serialization options["maxObjectDepth"] - 1로 설정한다. -
serialized child를 child value, child serialization options, ownership type, serialization internal map, realm, 및 session으로 remote value로 직렬화한 결과로 둔다.
-
serialized child를 serialized에 추가한다.
-
-
serialized를 반환한다
iterable, serialization options, ownership type, serialization internal map, realm, 및 session이 주어졌을 때 mapping으로 직렬화하려면:
-
serialization options["
maxObjectDepth"]가 null이 아니면, 단언: serialization options["maxObjectDepth"]는 0보다 크다. -
serialized를 새 목록으로 둔다.
-
GetIterator(iterable, sync)의 IteratorToList 안의 item에 대해:
-
단언: IsArray(item)
-
property를 CreateListFromArrayLike(item)로 둔다
-
단언: property는 크기 2의 목록이다
-
key를 property[0]으로 두고, value를 property[1]로 둔다
-
child serialization options를 serialization options의 클론으로 둔다.
-
child serialization options["
maxObjectDepth"]가 null이 아니면, child serialization options["maxObjectDepth"]를 child serialization options["maxObjectDepth"] - 1로 설정한다. -
Type(key)이 String이면, serialized key를 child key로 두고, 그렇지 않으면 serialized key를 child key, child serialization options, ownership type, serialization internal map, realm, 및 session으로 remote value로 직렬화한 결과로 둔다.
-
serialized value를 value, child serialization options, ownership type, serialization internal map, realm, 및 session으로 remote value로 직렬화한 결과로 둔다.
-
serialized child를 («serialized key, serialized value»)로 둔다.
-
serialized child를 serialized에 추가한다.
-
-
serialized를 반환한다
7.6.3.15. script.ResultOwnership 타입
script.ResultOwnership="root"/"none"
script.ResultOwnership은 직렬화된 값의
소유권이 어떻게 처리될지를 지정한다.
7.6.3.16. script.SerializationOptions 타입
script.SerializationOptions= { ?maxDomDepth: (js-uint / null) .default 0, ?maxObjectDepth: (js-uint / null) .default null, ?includeShadowTree: ("none"/"open"/"all") .default "none", }
script.SerializationOptions는 ECMAScript 객체가
어떻게 직렬화될지를 지정할 수 있게 한다.
7.6.3.17. script.SharedId 타입
script.SharedId = text;
script.SharedId 타입은 임의의 realm(샌드박스 렐름 포함)에서
사용할 수 있는 DOM Node에
대한
참조를 나타낸다.
7.6.3.18. script.StackFrame 타입
script.StackFrame= {columnNumber: js-uint,functionName: text,lineNumber: js-uint,url: text, }
스택 추적 안의 프레임은 StackFrame
객체로 표현된다. 이는 스크립트의 URL을 나타내는 url 속성,
실행 중인 함수의 이름을 나타내는 functionName 속성, 그리고
실행된 코드의 행 번호와 열 번호를 나타내는 lineNumber 및
columnNumber 속성을 가진다.
7.6.3.19. script.StackTrace 타입
script.StackTrace= {callFrames: [*script.StackFrame], }
script.StackTrace 타입은 스크립트 실행의 특정 지점에서의
javascript 스택을 나타낸다.
참고: 스택 프레임 목록을 가져오는 방법과 그 목록의 속성에 관한 세부 사항은 충분히 명시되어 있지 않으므로, 여기의 세부 사항은 구현 정의이다.
구현이 스택 프레임 목록을 생성할 수 있다고 가정한다. 이는 가장 최근의 것부터 시작하여 javascript 호출 스택의 각 항목마다 하나의 항목을 가지는 목록이다. 각 항목은 스크립트 script 안의 문 또는 표현식 실행에 대응하는 단일 스택 프레임이며, 다음 필드를 포함한다:
- script url
- script를 포함하는 리소스의 url
- function
- 실행 중인 함수의 이름
- line number
- script를 포함하는 리소스의 맨 위를 기준으로 한, 실행된 코드의 0부터 시작하는 행 번호.
- column number
- script를 포함하는 리소스 안의 행 시작을 기준으로 한, 실행된 코드의 0부터 시작하는 열 번호.
스택 프레임 목록 stack으로 스택 추적 구성을 하려면:
-
call frames를 새 목록으로 둔다.
-
stack 안의 각 스택 프레임 frame에 대해, 가장 최근에 실행된 프레임부터 시작하여 다음 단계를 실행한다:
-
url을 frame의 script url의 URL이 주어졌을 때 URL 직렬화기를 실행한 결과로 둔다.
-
frame info를
script.StackFrame생성규칙과 일치하는 새 맵으로 두며,url필드는 url로,functionName필드는 frame의 function으로,lineNumber필드는 frame의 line number로,columnNumber필드는 frame의 column number로 설정한다.
-
-
frame info를 call frames에 추가한다.
-
stack trace를
script.StackTrace생성규칙과 일치하는 새 맵으로 두며,callFrames속성은 call frames로 설정한다. -
stack trace를 반환한다.
현재 스택 추적은 실행 중인 실행 컨텍스트의 callstack을 나타내는 스택 프레임 목록이 주어졌을 때 스택 추적 구성의 결과이다.
예외, 또는 throw 타입의 Completion Record,
exception에 대한 예외에 대한 스택
추적은 다음으로 주어진다:
-
exception이 예외로 throw된 값이면, record를 exception을 throw하기 위해 생성된 Completion Record로 둔다. 그렇지 않으면 record를 exception으로 둔다.
-
stack을 record가 생성된 지점에서의 실행에 대응하는 스택 프레임 목록으로 둔다.
-
stack이 주어졌을 때 스택 추적 구성을 반환한다.
7.6.3.20. script.Source 타입
script.Source= {realm: script.Realm, ?context: browsingContext.BrowsingContext, ?userContext: browser.UserContext }
script.Source 타입은 스크립트 관련 이벤트가 발생한
선택적 browsingContext.BrowsingContext 및 관련
browser.UserContext를 가진 script.Realm을 나타낸다.
-
realm을 source realm에 대한 realm id로 둔다.
-
environment settings를 realm 실행 컨텍스트의 Realm 컴포넌트가 source realm인 environment settings object로 둔다.
-
environment settings가 연관된
Document를 가지면:-
document를 environment settings의 연관된
Document로 둔다. -
navigable을 document의 node navigable로 둔다.
-
navigable id를 navigable이 null이 아니면 navigable에 대한 navigable id로 둔다.
-
user context id를 navigable의 연관된 사용자 컨텍스트의 user context id로 둔다.
그렇지 않으면 navigable을 null로 둔다.
-
-
source를
script.Source생성규칙과 일치하는 맵으로 두며,realm필드는 realm로 설정하고,context필드는 navigable이 null이 아니면 navigable id로 설정하거나 그렇지 않으면 설정하지 않고,userContext필드는 |navigable이 null이 아니면 user context id로 설정하거나 그렇지 않으면 설정하지 않는다. -
source를 반환한다.
7.6.3.21. script.Target 타입
script.RealmTarget= {realm: script.Realm }script.ContextTarget= {context: browsingContext.BrowsingContext, ?sandbox: text }script.Target= ( script.ContextTarget / script.RealmTarget )
script.Target 타입은 script.Realm 또는
browsingContext.BrowsingContext 중 하나인 값을 나타낸다.
이는 navigable 식별자가 navigable의 활성 문서에 연관된 realm을
대신할 수 있는 경우에 유용하다.
-
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
sandbox가 null이거나 빈 문자열이면:
-
document를 navigable의 활성 문서로 둔다.
-
environment settings를 관련 전역 객체의 연관된
Document가 document인 environment settings object로 둔다. -
realm을 environment settings의 realm 실행 컨텍스트의 Realm 컴포넌트로 둔다.
-
-
그렇지 않으면: realm을 sandbox 및 navigable이 주어졌을 때 샌드박스 realm 가져오기 또는 생성을 시도한 결과로 둔다.
-
데이터 realm과 함께 success를 반환한다
-
target이
script.ContextTarget생성규칙과 일치하면:-
sandbox를 null로 둔다.
-
target이 "
sandbox"를 포함하면, sandbox를 target["sandbox"]로 설정한다. -
realm을 target["
context"] 및 sandbox로 navigable에서 realm 가져오기로 둔다.
-
-
그렇지 않으면:
-
단언: target은
script.RealmTarget생성규칙과 일치한다. -
realm id를 target의
realm필드 값으로 둔다. -
realm을 realm id가 주어졌을 때 realm 가져오기로 둔다.
-
-
데이터 realm과 함께 success를 반환한다
7.6.4. 명령
7.6.4.1. script.addPreloadScript 명령
script.addPreloadScript 명령은 프리로드 스크립트를 추가한다.
- 명령 타입
-
script.AddPreloadScript= (method:"script.addPreloadScript",params: script.AddPreloadScriptParameters )script.AddPreloadScriptParameters= {functionDeclaration: text, ?arguments: [*script.ChannelValue], ?contexts: [+browsingContext.BrowsingContext], ?userContexts: [+browser.UserContext], ?sandbox: text } - 반환 타입
-
script.AddPreloadScriptResult= {script: script.PreloadScript }
-
command parameters가 "
userContexts"를 포함하고 command parameters가 "contexts"를 포함하면, invalid argument error code와 함께 error를 반환한다. -
function declaration을 command parameters의
functionDeclaration필드로 둔다. -
arguments를 존재하면 command parameters의
arguments필드로 두고, 그렇지 않으면 빈 목록으로 둔다. -
user contexts를 집합으로 둔다.
-
navigables를 null로 둔다.
-
command parameters의
contexts필드가 존재하면:-
navigables를 빈 집합으로 설정한다.
-
command parameters["
contexts"]의 각 navigable id에 대해-
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
navigable이 최상위 traversable이 아니면, invalid argument error code와 함께 error를 반환한다.
-
navigable을 navigables에 추가한다.
-
-
-
그렇지 않고, command parameters가
userContexts를 포함하면:-
user contexts를 command parameters["
userContexts"]로 집합 생성한 것으로 설정한다. -
user contexts의 각 user context id에 대해:
-
user context를 user context id로 사용자 컨텍스트 가져오기한 것으로 설정한다.
-
user context가 null이면, no such user context error code와 함께 error를 반환한다.
-
-
-
sandbox를 command parameters 안의 "
sandbox" 필드 값으로 두고, 존재하지 않으면 null로 둔다. -
script를 UUID의 문자열 표현으로 둔다.
-
preload script map을 session의 프리로드 스크립트 맵으로 둔다.
-
preload script map[script]를
function declarationfunction declaration,argumentsarguments,contextsnavigables,sandboxsandbox, 및user contextsuser contexts를 가진 struct로 설정한다. -
script필드가 script로 설정된script.AddPreloadScriptResult와 일치하는 새 맵을 반환한다.
7.6.4.2. script.disown 명령
script.disown 명령은 지정된 핸들의 소유를 해제한다. 다른 핸들이나 강한 ECMAScript 참조가 있을 수 있으므로, 이는 핸들된 객체가 가비지 컬렉션될 것을 보장하지 않는다.
- 명령 타입
-
script.Disown= (method:"script.disown",params: script.DisownParameters )script.DisownParameters= {handles: [*script.Handle]target: script.Target; } - 반환 타입
-
script.DisownResult= EmptyResult
-
realm을 command parameters의
target필드 값이 주어졌을 때 target에서 realm 가져오기를 시도한 결과로 둔다. -
handles를 command parameters의
handles필드 값으로 둔다. -
handles의 각 handle id에 대해:
-
handle map을 realm의 handle object map으로 둔다
-
handle map이 handle id를 포함하면, handle map에서 handle id를 제거한다.
-
-
데이터 null과 함께 success를 반환한다.
7.6.4.3. script.callFunction 명령
script.callFunction 명령은 지정된 realm에서 지정된 인수로 제공된 함수를 호출한다.
RealmInfo는 realm 또는 navigable일 수 있다.
참고: functionDeclaration 안에
화살표 함수가 있는 경우,
this 인수는 함수의 this 바인딩에 영향을 주지 않는다.
- 명령 타입
-
script.CallFunction= (method:"script.callFunction",params: script.CallFunctionParameters )script.CallFunctionParameters= {functionDeclaration: text,awaitPromise: bool,target: script.Target, ?arguments: [*script.LocalValue], ?resultOwnership: script.ResultOwnership, ?serializationOptions: script.SerializationOptions, ?this: script.LocalValue, ?userActivation: bool .default false, } - 반환 타입
-
script.CallFunctionResult= script.EvaluateResult
TODO: script.evaluate에서 설명한 timeout 인수를 추가한다.
realm, serialized arguments list 및 session이 주어졌을 때 인수 역직렬화:
-
deserialized arguments list를 빈 목록으로 둔다.
-
serialized arguments list의 각 serialized argument에 대해:
-
deserialized argument를 serialized argument, realm 및 session가 주어졌을 때 local value 역직렬화를 시도한 결과로 둔다.
-
deserialized argument를 deserialized arguments list에 추가한다.
-
-
데이터 deserialized arguments list와 함께 success를 반환한다.
참고: function declaration는 괄호로 감싸져 평가된다.
-
bypassDisabledScripting을 true로 둔다.
-
parenthesized function declaration를 «"
(", function declaration, ")"»의 연결로 둔다 -
function script를 parenthesized function declaration, environment settings, base URL, options 및 bypassDisabledScripting로 classic script 생성의 결과로 둔다.
-
environment settings로 스크립트 실행 준비를 수행한다.
-
function body evaluation status를 ScriptEvaluation(function script의 record)로 둔다.
-
environment settings로 스크립트 실행 후 정리를 수행한다.
-
function body evaluation status를 반환한다.
session 및 command parameters를 사용한 원격 끝 단계는 다음과 같다:
-
realm을 command parameters의
target필드 값이 주어졌을 때 target에서 realm 가져오기를 시도한 결과로 둔다. -
realm id를 realm의 realm id로 둔다.
-
environment settings를 realm 실행 컨텍스트의 Realm 컴포넌트가 realm인 environment settings object로 둔다.
-
command arguments를 command parameters의
arguments필드 값으로 둔다. -
deserialized arguments를 빈 목록으로 둔다.
-
command arguments가 null이 아니면, deserialized arguments를 realm, command arguments 및 session이 주어졌을 때 인수 역직렬화를 시도한 결과로 설정한다.
-
this parameter를 command parameters의
this필드 값으로 둔다. -
this object를 null로 둔다.
-
this parameter가 null이 아니면, this object를 this parameter, realm 및 session가 주어졌을 때 local value 역직렬화를 시도한 결과로 설정한다.
-
function declaration을 command parameters의
functionDeclaration필드 값으로 둔다. -
await promise를 command parameters의
awaitPromise필드 값으로 둔다. -
serialization options를 존재하면 command parameters의
serializationOptions필드 값으로 두고, 그렇지 않으면 필드가 기본값으로 설정된script.SerializationOptions생성규칙과 일치하는 맵으로 둔다. -
result ownership을 존재하면 command parameters의
resultOwnership필드 값으로 두고, 그렇지 않으면none으로 둔다. -
base URL을 environment settings의 API base URL로 둔다.
-
options를 기본 스크립트 fetch 옵션으로 둔다.
-
function body evaluation status를 function declaration, environment settings, base URL, 및 options로 함수 본문 평가의 결과로 둔다.
-
function body evaluation status.[[Type]]이
throw이면:-
exception details를 realm, function body evaluation status, result ownership 및 session이 주어졌을 때 예외 세부 정보 가져오기의 결과로 둔다.
-
exceptionDetails필드가 exception details로 설정된script.EvaluateResultException생성규칙과 일치하는 새 맵을 반환한다.
-
-
function object를 function body evaluation status.[[Value]]로 둔다.
-
IsCallable(function object)이
false이면:-
invalid argument error code와 함께 error를 반환한다
-
-
command parameters["
userActivation"]이 true이면, 활성화 알림 단계를 실행한다. -
environment settings로 스크립트 실행 준비를 수행한다.
-
evaluation status를 Call(function object, this object, deserialized arguments)로 설정한다.
-
evaluation status.[[Type]]이
normal이고, await promise가true이며, IsPromise(evaluation status.[[Value]])이면:-
evaluation status를 Await(evaluation status.[[Value]])로 설정한다.
-
-
environment settings로 스크립트 실행 후 정리를 수행한다.
-
evaluation status.[[Type]]이
throw이면:-
exception details를 realm, evaluation status, result ownership 및 session이 주어졌을 때 예외 세부 정보 가져오기의 결과로 둔다.
-
exceptionDetails필드가 exception details로 설정된script.EvaluateResultException생성규칙과 일치하는 새 맵을 반환한다.
-
-
단언: evaluation status.[[Type]]은
normal이다. -
result를 evaluation status.[[Value]], serialization options, result ownership, serialization internal map으로서의 새 맵, realm 및 session로 remote value로 직렬화한 결과로 둔다.
-
realm필드가 realm id로 설정되고result필드가 result로 설정된script.EvaluateResultSuccess생성규칙과 일치하는 새 맵을 반환한다.
7.6.4.4. script.evaluate 명령
script.evaluate 명령은 지정된 realm에서 제공된 스크립트를 평가한다. 편의를 위해 realm 대신 navigable을 제공할 수 있으며, 이 경우 사용되는 realm은 브라우징 컨텍스트의 활성 문서의 realm이다.
이 메서드는 제공된 스크립트를 실행한 값을 반환한다. 단, promise를 반환하고
awaitPromise가 true인 경우에는 promise의 resolved value를 반환한다.
- 명령 타입
-
script.Evaluate= (method:"script.evaluate",params: script.EvaluateParameters )script.EvaluateParameters= {expression: text,target: script.Target,awaitPromise: bool, ?resultOwnership: script.ResultOwnership, ?serializationOptions: script.SerializationOptions, ?userActivation: bool .default false, } - 반환 타입
-
script.EvaluateResult
TODO: timeout 인수를 추가한다. 이것이 어떻게 동작해야 하는지는 완전히 명확하지 않다. Chrome에서는 timeout이 promise resolve 단계에는 적용되지 않는 것처럼 보이지만, 이는 클라이언트가 원하는 것은 아닐 가능성이 높다.
session 및 command parameters가 주어진 원격 끝 단계는 다음과 같다:
-
realm을 command parameters의
target필드 값이 주어졌을 때 target에서 realm 가져오기를 시도한 결과로 둔다. -
realm id를 realm의 realm id로 둔다.
-
environment settings를 realm 실행 컨텍스트의 Realm 컴포넌트가 realm인 environment settings object로 둔다.
-
source를 command parameters의
expression필드 값으로 둔다. -
await promise를 command parameters의
awaitPromise필드 값으로 둔다. -
serialization options를 존재하면 command parameters의
serializationOptions필드 값으로 두고, 그렇지 않으면 필드가 기본값으로 설정된script.SerializationOptions생성규칙과 일치하는 맵으로 둔다. -
result ownership을 존재하면 command parameters의
resultOwnership필드 값으로 두고, 그렇지 않으면none으로 둔다. -
options를 기본 스크립트 fetch 옵션으로 둔다.
-
base URL을 environment settings의 API base URL로 둔다.
-
bypassDisabledScripting을 true로 둔다.
-
script를 source, environment settings, base URL, options 및 bypassDisabledScripting로 classic script 생성한 결과로 둔다.
-
command parameters["
userActivation"]이 true이면, 활성화 알림 단계를 실행한다. -
environment settings로 스크립트 실행 준비를 수행한다.
-
evaluation status를 ScriptEvaluation(script의 record)로 설정한다.
-
evaluation status.[[Type]]이
normal이고, await promise가 true이며, IsPromise(evaluation status.[[Value]])이면:-
evaluation status를 Await(evaluation status.[[Value]])로 설정한다.
-
-
environment settings로 스크립트 실행 후 정리를 수행한다.
-
evaluation status.[[Type]]이
throw이면:-
exception details를 realm, evaluation status, result ownership 및 session로 예외 세부 정보 가져오기의 결과로 둔다.
-
realm필드가 realm id로 설정되고,exceptionDetails필드가 exception details로 설정된script.EvaluateResultException생성규칙과 일치하는 새 맵을 반환한다.
-
-
단언: evaluation status.[[Type]]은
normal이다. -
result를 evaluation status.[[Value]], serialization options, result ownership, serialization internal map으로서의 새 맵, realm 및 session로 remote value로 직렬화한 결과로 둔다.
-
realm필드가 realm id로 설정되고result필드가 result로 설정된script.EvaluateResultSuccess생성규칙과 일치하는 새 맵을 반환한다.
7.6.4.5. script.getRealms 명령
script.getRealms 명령은 모든 realm의 목록을 반환하며, 선택적으로 특정 타입의 realm으로, 또는 navigable의 활성 문서와 연관된 realm으로 필터링할 수 있다.
- 명령 타입
-
script.GetRealms= (method:"script.getRealms",params: script.GetRealmsParameters )script.GetRealmsParameters= { ?context: browsingContext.BrowsingContext, ?type: script.RealmType, } - 반환 타입
-
script.GetRealmsResult= {realms: [*script.RealmInfo] }
-
environment settings를 execution ready flag가 설정된 모든 environment settings object의 목록으로 둔다.
-
command parameters가
context를 포함하면:-
navigable을 command parameters["
context"]로 navigable 가져오기를 시도한 결과로 둔다. -
document를 navigable의 활성 문서로 둔다.
-
navigable environment settings를 목록으로 둔다.
-
environment settings의 각 settings에 대해:
-
다음 조건 중 하나라도 성립하면:
-
settings의 관련 전역 객체의 연관된
Document가 document임 -
settings로 지정되는 전역 객체가 그 owner set 안에 document를 가진
WorkerGlobalScope임
settings를 navigable environment settings에 추가한다.
-
-
-
environment settings를 navigable environment settings로 설정한다.
-
-
realms를 목록으로 둔다.
-
environment settings의 각 settings에 대해:
-
realm info를 settings가 주어졌을 때 realm info 가져오기의 결과로 둔다.
-
command parameters가
type을 포함하고 realm info["type"]이 command parameters["type"]와 같지 않으면 계속한다. -
realm info가 null이 아니면, realm info를 realms에 추가한다.
-
-
body를
realms필드가 realms로 설정된script.GetRealmsResult생성규칙과 일치하는 맵으로 둔다. -
데이터 body와 함께 success를 반환한다.
중첩 worker 등에 대해 realm 부모도 허용하도록 이것을 확장해야 하는가? 또는 모든 조상 worker를 가져와야 하는가.
7.6.4.6. script.removePreloadScript 명령
script.removePreloadScript 명령은 프리로드 스크립트를 제거한다.
- 명령 타입
-
script.RemovePreloadScript= (method:"script.removePreloadScript",params: script.RemovePreloadScriptParameters )script.RemovePreloadScriptParameters= {script: script.PreloadScript } - 반환 타입
-
script.RemovePreloadScriptResult= EmptyResult
-
script를 command parameters 안의 "
script" 필드 값으로 둔다. -
preload script map을 session의 프리로드 스크립트 맵으로 둔다.
-
preload script map이 script를 포함하지 않으면, no such script error code와 함께 error를 반환한다.
-
preload script map에서 script를 제거한다.
-
null을 반환한다
7.6.5. 이벤트
7.6.5.1. script.message 이벤트
- 이벤트 타입
-
script.Message= (method:"script.message",params: script.MessageParameters )script.MessageParameters= {channel: script.Channel,data: script.RemoteValue,source: script.Source, }
-
environment settings를 realm 실행 컨텍스트의 Realm 컴포넌트가 realm인 environment settings object로 둔다.
-
related navigables를 environment settings가 주어졌을 때 관련 navigable 가져오기의 결과로 둔다.
-
session, "
script.message" 및 related navigables가 주어졌을 때 event가 활성화되어 있음이면:-
channel properties가 "
serializationOptions"를 포함하면, serialization options를 channel properties의serializationOptions필드 값으로 둔다. 그렇지 않으면 serialization options를 필드가 기본값으로 설정된script.SerializationOptions생성규칙과 일치하는 맵으로 둔다. -
channel properties가 "
ownership"를 포함하면, ownership type을 channel properties["ownership"]로 둔다. 그렇지 않으면 ownership type을 "none"으로 둔다. -
data를 message, serialization options, ownership type, serialization internal map으로서의 새 맵 및 realm이 주어졌을 때 remote value로 직렬화한 결과로 둔다.
-
source를 realm로 소스 가져오기한 것으로 둔다.
-
params를
script.MessageParameters생성규칙과 일치하는 맵으로 두며,channel필드는 channel properties["channel"]로,data필드는 data로,source필드는 source로 설정한다. -
body를
params필드가 params로 설정된script.Message생성규칙과 일치하는 맵으로 둔다. -
session 및 body로 이벤트를 방출한다.
-
7.6.5.2. script.realmCreated 이벤트
- 이벤트 타입
-
script.RealmCreated= (method:"script.realmCreated",params: script.RealmInfo )
window environment settings object 설정, worker environment settings object 설정 또는 worklet environment settings object 설정 알고리즘 중 하나가 호출될 때, settings object를 반환하기 직전에:
-
environment settings를 새로 생성된 environment settings object로 둔다.
-
realm info를 environment settings가 주어졌을 때 realm info 가져오기의 결과로 둔다.
-
realm info가 null이면 반환한다.
-
related navigables를 environment settings가 주어졌을 때 관련 navigable 가져오기의 결과로 둔다.
-
body를
params필드가 realm info로 설정된script.RealmCreated생성규칙과 일치하는 맵으로 둔다. -
"
script.realmCreated" 및 related navigables가 주어진 event가 활성화된 세션의 집합 안의 각 session에 대해:-
session 및 body로 이벤트를 방출한다.
-
구독 우선순위 2를 가진 원격 끝 구독 단계는 session, navigables 및 include global이 주어졌을 때 다음과 같다:
-
environment settings를 execution ready flag가 설정된 모든 environment settings object의 목록으로 둔다.
-
environment settings의 각 settings에 대해:
-
related navigables를 새 집합으로 둔다.
-
settings의 관련 전역 객체의 연관된
Document가 Document이면:-
navigable을 settings의 관련 전역 객체의 연관된
Document의 node navigable로 둔다. -
navigable이 null이면 계속한다.
-
top-level traversible을 navigable의 top-level traversable로 둔다.
-
top-level traversible이 navigables 안에 없으면 계속한다.
-
top-level traversible을 related navigables에 추가한다.
그렇지 않고, include global이 false이면 계속한다.
-
-
realm info를 settings가 주어졌을 때 realm info 가져오기의 결과로 둔다.
-
realm info가 null이면 계속한다.
-
body를
params필드가 realm info로 설정된script.RealmCreated생성규칙과 일치하는 맵으로 둔다. -
session, "
script.realmCreated" 및 related navigables가 주어졌을 때 event가 활성화되어 있음이면:-
session 및 body로 이벤트를 방출한다.
-
-
7.6.5.3. script.realmDestroyed 이벤트
- 이벤트 타입
-
script.RealmDestroyed= (method:"script.realmDestroyed",params: script.RealmDestroyedParameters )script.RealmDestroyedParameters= {realm: script.Realm }
-
related navigables를 빈 집합으로 둔다.
-
document의 navigable을 related navigables에 추가한다.
-
document의 worklet global scopes 안의 각 worklet global scope에 대해:
-
realm을 worklet global scope의 관련 Realm으로 둔다.
-
realm id를 realm에 대한 realm id로 둔다.
-
params를
realm필드가 realm id로 설정된script.RealmDestroyedParameters생성규칙과 일치하는 맵으로 둔다. -
body를
params필드가 params로 설정된script.RealmDestroyed생성규칙과 일치하는 맵으로 둔다. -
"
script.realmDestroyed" 및 related navigables가 주어진 event가 활성화된 세션의 집합 안의 각 session에 대해:-
session 및 body로 이벤트를 방출한다.
-
-
-
environment settings를 관련 전역 객체의 연관된
Document가 document인 environment settings object로 둔다. -
realm을 environment settings의 realm 실행 컨텍스트의 Realm 컴포넌트로 둔다.
-
realm id를 realm에 대한 realm id로 둔다.
-
params를
realm필드가 realm id로 설정된script.RealmDestroyedParameters생성규칙과 일치하는 맵으로 둔다. -
body를
params필드가 params로 설정된script.RealmDestroyed생성규칙과 일치하는 맵으로 둔다. -
"
script.realmDestroyed" 및 related navigables가 주어진 event가 활성화된 세션의 집합 안의 각 session에 대해:-
session 및 body로 이벤트를 방출한다.
-
worker event loop event loop가, worker가 생명주기의 끝에 도달했기 때문이든 worker 종료 알고리즘을 통해 조기에 종료되었기 때문이든 파괴될 때마다:
-
environment settings를 event loop가 responsible event loop인 environment settings object로 둔다.
-
related navigables를 environment settings가 주어졌을 때 관련 navigable 가져오기의 결과로 둔다.
-
realm을 environment settings의 environment settings object의 Realm으로 둔다.
-
realm id를 realm에 대한 realm id로 둔다.
-
params를
realm필드가 realm id로 설정된script.RealmDestroyedParameters생성규칙과 일치하는 맵으로 둔다. -
body를
params필드가 params로 설정된script.RealmDestroyed생성규칙과 일치하는 맵으로 둔다.
7.7. storage 모듈
storage 모듈은 저장소와 관련된 기능 및 이벤트를 포함한다.
storage partition은 사용자 에이전트가 쿠키 및 local storage 같은 영속 데이터를 조직할 수 있는 이름공간이다.
storage partition key는 storage partition을 고유하게 식별하는 맵이다.
7.7.1. 정의
StorageCommand = (
storage.DeleteCookies //
storage.GetCookies //
storage.SetCookie
)
StorageResult = (
storage.DeleteCookiesResult /
storage.GetCookiesResult /
storage.SetCookieResult
)
7.7.2. 타입
7.7.2.1. storage.PartitionKey 타입
storage.PartitionKey= { ?userContext: text, ?sourceOrigin: text, Extensible, }
storage.PartitionKey 타입은 storage partition key를 나타낸다.
다음 표준 storage partition key 속성 표는 원격 끝이 지원하기로 선택할 수 있는, 잘 알려진 의미를 가진 속성들을 열거한다. 구현은 추가 확장 storage partition key 속성을 정의할 수 있다.
| 속성 | 정의 |
|---|---|
"userContext"
| 사용자 컨텍스트 id |
"sourceOrigin"
| storage partition에 접근할 수 있는 리소스의 origin 직렬화 |
원격 끝은 임의 개수의 확장 storage partition key 속성을 지원할 수 있다. 다른 구현과의 충돌을 피하기 위해, 이러한 속성은 벤더 및 사용자 에이전트에 대한 고유 식별자로 시작하고 그 뒤에 U+003A (:)가 와야 한다.
원격 끝은 0개 이상의 엔트리를 포함하는 storage partition key 속성의 기본값에 대한 맵을 가진다. 각 키는 storage partition key가 표준 storage partition에 대응하는 경우 표준 storage partition key 속성 표의 구성원이어야 하며, 그렇지 않은 경우 확장 storage partition key 속성이어야 한다. 값은 사용자가 명시적 값을 제공하지 않을 때 사용될 해당 partition key의 기본값을 나타낸다. 정확한 엔트리는 구현 정의이며 구현이 채택한 storage partitioning에 의해 결정된다.
원격 끝은 0개 이상의 엔트리를 포함하는 필수 partition key 속성의 목록을 가진다. 각 키는 storage partition key가 표준 storage partition에 대응하는 경우 표준 storage partition key 속성 표의 구성원이어야 하며, 그렇지 않은 경우 확장 storage partition key 속성이어야 한다. 정확한 엔트리는 구현 정의이며 구현이 채택한 storage partitioning에 의해 결정된다. 이 목록에는 기본값을 사용할 수 없는 partition key만 포함된다. 따라서 이 목록은 storage partition key 속성의 기본값의 키와 엔트리를 공유해서는 안 된다.
-
deserialized filter를 빈 맵으로 둔다.
-
filter 안의 각 name → value에 대해:
-
deserialized name을 cookie 변환 표에서 JSON 키 name에 대응하는 필드 이름으로 둔다.
-
name이 "
value"이면, deserialized value를 value로 프로토콜 bytes 역직렬화한 것으로 설정하고, 그렇지 않으면 deserialized value를 value로 둔다. -
deserialized filter[deserialized name]를 deserialized value로 설정한다.
-
-
deserialized filter를 반환한다.
-
partition spec이 null이면:
-
partition spec을 빈 맵으로 설정한다.
-
-
그렇지 않고, partition spec["
type"]이 "context"이면:-
navigable을 partition spec["
context"]가 주어졌을 때 navigable 가져오기를 시도한 결과로 둔다. -
partition key를 navigable의 연관된 storage partition의 key로 둔다.
-
데이터 partition key와 함께 success를 반환한다.
-
-
partition key를 빈 맵으로 둔다.
-
storage partition key 속성의 기본값 안의 각 name → default value에 대해:
-
remote end의 필수 partition key 속성 안의 각 name에 대해:
-
partition spec[name]이 존재하면:
-
partition key][name]을 partition spec[name]로 설정한다.
-
-
그렇지 않으면:
-
underspecified storage partition error code와 함께 error를 반환한다.
-
-
-
데이터 partition key와 함께 success를 반환한다.
-
storage partition key가 현존하는 storage partition을 고유하게 식별하면:
-
store를 해당 storage partition의 cookie store로 둔다.
-
데이터 store와 함께 success를 반환한다.
-
-
no such storage partition error code와 함께 error를 반환한다.
-
filter 안의 각 name → value에 대해:
-
stored cookie[name]이 value와 같지 않으면:
-
false를 반환한다.
-
-
-
true를 반환한다.
-
cookies를 새 목록으로 둔다.
-
deserialized filter를 filter로 filter 역직렬화한 것으로 설정한다.
-
cookie store 안의 각 stored cookie에 대해:
-
stored cookie 및 deserialized filter로 cookie 일치한 결과가 true이면:
-
stored cookie를 cookies에 추가한다.
-
-
-
cookies를 반환한다.
7.7.3. 명령
7.7.3.1. storage.getCookies 명령
storage.getCookies 명령은 제공된 매개변수 집합과 일치하는 0개 이상의 cookie를 가져온다.
- 명령 타입
-
storage.GetCookies= (method:"storage.getCookies",params: storage.GetCookiesParameters )storage.CookieFilter= { ?name: text, ?value: network.BytesValue, ?domain: text, ?path: text, ?size: js-uint, ?httpOnly: bool, ?secure: bool, ?sameSite: network.SameSite, ?expiry: js-uint, Extensible, }storage.BrowsingContextPartitionDescriptor= {type:"context",context: browsingContext.BrowsingContext }storage.StorageKeyPartitionDescriptor= {type:"storageKey", ?userContext: text, ?sourceOrigin: text, Extensible, }storage.PartitionDescriptor= ( storage.BrowsingContextPartitionDescriptor / storage.StorageKeyPartitionDescriptor )storage.GetCookiesParameters= { ?filter: storage.CookieFilter, ?partition: storage.PartitionDescriptor, } - 반환 타입
-
storage.GetCookiesResult= {cookies: [*network.Cookie],partitionKey: storage.PartitionKey, }
-
filter를 command parameters의
filter필드 값으로 둔다. 존재하면 그 값으로 두고, 존재하지 않으면 빈 맵으로 둔다. -
partition spec을 command parameters의
partition필드 값으로 둔다. 존재하면 그 값으로 두고, 존재하지 않으면 null로 둔다. -
partition key를 partition spec로 storage partition spec 확장을 시도한 결과로 둔다.
-
store를 partition key로 cookie store 가져오기를 시도한 결과로 둔다.
-
cookies를 store 및 filter로 일치하는 cookie 가져오기한 결과로 둔다.
-
serialized cookies를 새 목록으로 둔다.
-
cookies 안의 각 cookie에 대해:
-
serialized cookie를 cookie가 주어졌을 때 cookie 직렬화의 결과로 둔다.
-
serialized cookie를 serialized cookies에 추가한다.
-
-
body를
cookies필드가 serialized cookies로,partitionKey필드가 partition key로 설정된storage.GetCookiesResult생성규칙과 일치하는 맵으로 둔다. -
데이터 body와 함께 success를 반환한다.
7.7.3.2. storage.setCookie 명령
storage.setCookie 명령은 cookie store 안에 새 cookie를 생성하며, [COOKIES]에 따라 일치하는 해당 store 안의 모든 cookie를 대체한다.
- 명령 타입
-
storage.SetCookie= (method:"storage.setCookie",params: storage.SetCookieParameters, )storage.PartialCookie= {name: text,value: network.BytesValue,domain: text, ?path: text, ?httpOnly: bool, ?secure: bool, ?sameSite: network.SameSite, ?expiry: js-uint, Extensible, }storage.SetCookieParameters= {cookie: storage.PartialCookie, ?partition: storage.PartitionDescriptor, } - 반환 타입
-
storage.SetCookieResult= {partitionKey: storage.PartitionKey }
-
cookie spec를 command parameters의
cookie필드 값으로 둔다. -
partition spec을 command parameters의
partition필드 값으로 둔다. 존재하면 그 값으로 두고, 존재하지 않으면 null로 둔다. -
partition key를 partition spec로 storage partition spec 확장을 시도한 결과로 둔다.
-
store를 partition key로 cookie store 가져오기를 시도한 결과로 둔다.
-
deserialized value를 cookie spec["
value"]로 프로토콜 bytes 역직렬화한 것으로 둔다. -
store 안에 cookie name cookie spec["
name"], cookie value deserialized value, cookie domain cookie spec["domain"], 그리고 cookie 변환 표에 열거된 다음 cookie 개념의 attribute-value 목록을 사용하여 cookie를 생성한다:- Cookie path
-
존재하면 cookie spec["
path"], 그렇지 않으면 "/". - Cookie secure only
-
존재하면 cookie spec["
secure"], 그렇지 않으면 false. - Cookie HTTP only
-
존재하면 cookie spec["
httpOnly"], 그렇지 않으면 false. - Cookie expiry time
-
존재하면 cookie spec["
expiry"], 그렇지 않으면 이것이 session cookie임을 나타내도록 설정하지 않은 채로 둔다.참고: cookie의 expiry 값은 Cookie Lifetime Limits에 따라 remote end에 의해 제한될 수 있다.
- Cookie same site
-
존재하면 cookie spec["
sameSite"], 그렇지 않으면 same site policy가 정의되지 않았음을 나타내도록 설정하지 않은 채로 둔다.
이 단계가 cookie store에 cookie를 삽입하지 못하고 중단되면, unable to set cookie error code와 함께 error를 반환한다.
-
body를
partitionKey필드가 partition key로 설정된storage.SetCookieResult생성규칙과 일치하는 맵으로 둔다. -
데이터 body와 함께 success를 반환한다.
7.7.3.3. storage.deleteCookies 명령
storage.deleteCookies 명령은 제공된 매개변수 집합과 일치하는 0개 이상의 cookie를 제거한다.
- 명령 타입
-
storage.DeleteCookies= (method:"storage.deleteCookies",params: storage.DeleteCookiesParameters, )storage.DeleteCookiesParameters= { ?filter: storage.CookieFilter, ?partition: storage.PartitionDescriptor, } - 반환 타입
-
storage.DeleteCookiesResult= {partitionKey: storage.PartitionKey }
-
filter를 command parameters의
filter필드 값으로 둔다. 존재하면 그 값으로 두고, 존재하지 않으면 빈 맵으로 둔다. -
partition spec을 command parameters의
partition필드 값으로 둔다. 존재하면 그 값으로 두고, 존재하지 않으면 null로 둔다. -
partition key를 partition spec로 storage partition spec 확장을 시도한 결과로 둔다.
-
store를 partition key로 cookie store 가져오기를 시도한 결과로 둔다.
-
cookies를 store 및 filter로 일치하는 cookie 가져오기한 결과로 둔다.
-
cookies 안의 각 cookie에 대해:
-
cookie를 store에서 제거한다.
-
-
body를
partitionKey필드가 partition key로 설정된storage.DeleteCookiesResult생성규칙과 일치하는 맵으로 둔다. -
데이터 body와 함께 success를 반환한다.
7.8. log 모듈
log 모듈은 로깅과 관련된 기능 및 이벤트를 포함한다.
BiDi Session은 log event buffer를 가지며, 이는 navigable id에서 아직 방출되지 않은 해당 컨텍스트의 log event 목록으로 가는 맵이다. 사용자 에이전트는 이 buffer에 최대 크기를 부과할 수 있으며, 단 이벤트 A와 B가 같은 컨텍스트에서 발생하고 A가 B보다 먼저 발생했으며 둘 다 buffer에 추가된 경우, B에 대한 엔트리가 A에 대한 엔트리보다 먼저 제거되어서는 안 된다는 조건을 따른다.
session, navigables 및 event가 주어졌을 때 log event 버퍼링하려면:
-
buffer를 session의 log event buffer로 둔다.
-
navigable ids를 새 목록으로 둔다.
-
navigables의 각 navigable에 대해:
-
navigable에 대한 navigable id를 navigable ids에 추가한다.
-
-
navigable ids 안의 각 navigable id에 대해:
-
other navigables를 빈 목록으로 둔다
-
navigable ids 안의 각 other id에 대해:
-
other id가 navigable id와 같지 않으면, other id를 other navigables에 추가한다.
-
buffer가 navigable id를 포함하지 않으면, buffer[navigable id]를 새 목록으로 둔다.
-
(event, other navigables)를 buffer[navigable id]에 추가한다.
-
참고: 각 이벤트가 한 번만 방출되도록 하기 위해 여기에서 다른 navigable을 저장한다. 실제로 이는 여러 navigable과 연관될 수 있는 worker에 대해서만 관련된다.
이것을 browsing context 또는 top-level traversable 중 무엇을 키로 삼을지? 차이는 프레임에서 이벤트가 발생한 뒤 로컬 끝이 최상위 navigable의 log event를 구독하기 전에 그 프레임이 탐색되는 경우에 무엇이 일어나는가에 있다.
7.8.1. 정의
LogEvent = (
log.EntryAdded
)
7.8.2. 타입
7.8.2.1. log.LogEntry
log.Level="debug"/"info"/"warn"/"error"log.Entry= ( log.GenericLogEntry / log.ConsoleLogEntry / log.JavascriptLogEntry )log.BaseLogEntry= (level: log.Level,source: script.Source,text: text / null,timestamp: js-uint, ?stackTrace: script.StackTrace, )log.GenericLogEntry= { log.BaseLogEntry,type: text, }log.ConsoleLogEntry= { log.BaseLogEntry,type:"console",method: text,args: [*script.RemoteValue], }log.JavascriptLogEntry= { log.BaseLogEntry,type:"javascript", }
각 log event는 log.Entry 객체로 표현된다. 이는 추가된 log entry의 타입을 나타내는
type 속성, 심각도를 나타내는 level 속성,
log entry의 출처를 나타내는 source 속성, log message 문자열 자체를 가진
text 속성, 그리고 log entry가 생성된 시간에 대응하는
timestamp 속성을 가진다. 서로 다른 소스의 로그를 표현하기 위해
log.Entry의 특정 variant가 사용되며,
entry 타입에 특화된 추가 필드를 제공한다.
7.8.3. 이벤트
7.8.3.1. log.entryAdded 이벤트
- 이벤트 타입
-
log.EntryAdded= (method:"log.entryAdded",params: log.Entry, )
원격 끝 이벤트 트리거는 다음과 같다:
method, args, 그리고 options를 사용하여 다음 console steps를 정의한다:
-
활성 BiDi 세션 안의 각 session에 대해:
-
method가 "
error" 또는 "assert"이면 level을 "error"로 둔다. method가 "debug" 또는 "trace"이면 level을 "debug"로 둔다. method가 "warn"이면 level을 "warn"로 둔다. 그렇지 않으면 level을 "info"로 둔다. -
timestamp를 UTC의 현재 날짜와 시간을 나타내는 time value로 둔다.
-
text를 빈 문자열로 둔다.
-
args[0]의 Type이 String이고 args[0]이 formatting specifier를 포함하면, formatted args를 Formatter(args)로 둔다. 그렇지 않으면 formatted args를 args로 둔다.
참고: formatter 연산은 console 명세에서 덜 정의되어 있으므로, formatting은 서로 다른 구현 간에 일관되지 않을 수 있다.
-
formatted args 안의 각 arg에 대해:
-
arg가 args의 첫 번째 엔트리가 아니면, U+0020 SPACE를 text에 추가한다.
-
arg가 primitive ECMAScript value이면, ToString(arg)을 text에 추가한다. 그렇지 않으면 구현 정의 문자열을 text에 추가한다.
-
-
realm을 현재 Realm Record의 realm id로 둔다.
-
serialized args를 새 목록으로 둔다.
-
serialization options를 필드가 기본값으로 설정된
script.SerializationOptions생성규칙과 일치하는 맵으로 둔다. -
args의 각 arg에 대해:
-
serialized arg를 값으로 arg, serialization options, ownership type으로
none, serialization internal map으로 새 맵, realm 및 session을 사용하여 remote value로 직렬화한 결과로 둔다. -
serialized arg를 serialized args에 추가한다.
-
-
source를 현재 Realm Record가 주어졌을 때 source 가져오기의 결과로 둔다.
-
stack을 현재 stack trace로 둔다.
-
entry를
level필드가 level로,text필드가 text로,timestamp필드가 timestamp로,stackTrace필드가 stack로, method 필드가 method로,source필드가 source로, 그리고args필드가 serialized args로 설정된log.ConsoleLogEntry생성규칙과 일치하는 맵으로 둔다. -
body를
params필드가 entry로 설정된log.EntryAdded생성규칙과 일치하는 맵으로 둔다. -
settings를 current settings object로 둔다
-
related navigables를 settings가 주어졌을 때 관련 navigable 가져오기의 결과로 둔다.
-
session, "
log.entryAdded" 및 related navigables로 event가 활성화되면, session 및 body로 event를 방출한다.그렇지 않으면, session, related browsing contexts, 그리고 body로 log event를 버퍼링한다.
-
script, line number, column number, message 및 handled 인자를 사용하여 다음 error reporting steps를 정의한다:
-
handled가 true이면 반환한다.
-
settings를 script의 settings object로 둔다.
-
timestamp를 UTC의 현재 날짜와 시간을 나타내는 time value로 둔다.
-
stack을 보고되는 error에 대응하는 exception으로 exception의 stack trace한 것으로 둔다.
-
source를 현재 Realm Record가 주어졌을 때 source 가져오기의 결과로 둔다.
-
entry를
level이 "error"로,text가 message로,source가 source로,timestamp가 timestamp로, 그리고stackTrace필드가 stack로 설정된log.JavascriptLogEntry생성규칙과 일치하는 맵으로 둔다. -
body를
params필드가 entry로 설정된log.EntryAdded생성규칙과 일치하는 맵으로 둔다. -
related navigables를 settings가 주어졌을 때 관련 navigable 가져오기의 결과로 둔다.
-
활성 BiDi 세션 안의 각 session에 대해:
-
session, "
log.entryAdded" 및 related navigables로 event가 활성화되면, session 및 body로 event를 방출한다.그렇지 않으면, session, related browsing contexts, 그리고 body로 log event를 버퍼링한다.
-
훨씬 더 많은 것들이 로깅을 필요로 한다. CDP에는 LogEntryAdded 타입으로 xml, javascript, network, storage, appcache, rendering, security, deprecation, worker, violation, intervention, recommendation, other가 있다. 이들은 별도의 메서드로 표현되는 js exception 및 console API 타입에 더해 존재한다.
session, navigables 및 include global이 주어지고, 구독 우선순위 10을 가지는 원격 끝 구독 단계는 다음과 같다:
-
session의 log event buffer 안의 각 navigable id → events에 대해:
-
maybe context를 navigable id가 주어졌을 때 navigable 가져오기의 결과로 둔다.
-
maybe context가 error이면, log event buffer에서 navigable id를 제거하고 계속한다.
-
navigable을 maybe context의 data로 둔다
-
top level navigable을 navigable의 top-level traversable로 둔다.
-
include global이 true이고 top level navigable이 navigables 안에 없거나, 또는 include global이 false이고 top level navigable이 navigables 안에 있으면:
-
events 안의 각 (event, other navigables)에 대해:
-
session 및 event로 event를 방출한다.
-
other navigables 안의 각 other context id에 대해:
-
log event buffer가 other context id를 포함하면, log event buffer[other context id]에서 event를 제거한다.
-
-
-
-
7.9. input 모듈
input 모듈은 시뮬레이션된 사용자 입력을 위한 기능을 포함한다.
7.9.1. 정의
InputCommand = (
input.PerformActions //
input.ReleaseActions //
input.SetFiles
)
InputResult = (
input.PerformActionsResult /
input.ReleaseActionsResult /
input.SetFilesResult
)
InputEvent = (
input.FileDialogOpened
)
7.9.2. 타입
7.9.2.1. input.ElementOrigin
input.ElementOrigin 타입은 좌표 원점으로 사용될 Element를
나타낸다.
input.ElementOrigin= {type:"element",element: script.SharedReference }
input.ElementOrigin 단계는 다음과 같다:
-
object가
input.ElementOrigin생성규칙과 일치하는 맵이면 true를 반환한다. -
false를 반환한다.
input.ElementOrigin
단계를 얻으려면:
-
origin 및 navigable이 주어진 다음 단계를 반환한다:
-
Assert: origin은
input.ElementOrigin과 일치한다. -
document를 navigable의 활성 문서로 둔다.
-
reference를 origin["
element"]로 둔다 -
environment settings를 관련 전역 객체의 연관된
Document가 document인 환경 설정 객체로 둔다. -
realm을 environment settings의 realm 실행 컨텍스트의 Realm 컴포넌트로 둔다.
-
element를 reference, realm, 그리고 session으로 원격 참조 역직렬화를 시도한 결과로 둔다.
-
element가
Element를 구현하지 않으면, error를 error code no such element와 함께 반환한다. -
데이터 element와 함께 success를 반환한다.
-
7.9.3. 명령
7.9.3.1. input.performActions 명령
input.performActions 명령은 지정된 사용자 입력 동작 시퀀스를 수행한다.
참고: 이 명령의 동작에 대한 자세한 설명은 [WEBDRIVER]의 actions 섹션을 참조한다.
- 명령 타입
-
input.PerformActions= (method:"input.performActions",params: input.PerformActionsParameters )input.PerformActionsParameters= {context: browsingContext.BrowsingContext,actions: [*input.SourceActions] }input.SourceActions= ( input.NoneSourceActions / input.KeySourceActions / input.PointerSourceActions / input.WheelSourceActions )input.NoneSourceActions= {type:"none",id: text,actions: [*input.NoneSourceAction] }input.NoneSourceAction= input.PauseActioninput.KeySourceActions= {type:"key",id: text,actions: [*input.KeySourceAction] }input.KeySourceAction= ( input.PauseAction / input.KeyDownAction / input.KeyUpAction )input.PointerSourceActions= {type:"pointer",id: text, ?parameters: input.PointerParameters,actions: [*input.PointerSourceAction] }input.PointerType="mouse"/"pen"/"touch"input.PointerParameters= { ?pointerType: input.PointerType .default "mouse" }input.PointerSourceAction= ( input.PauseAction / input.PointerDownAction / input.PointerUpAction / input.PointerMoveAction )input.WheelSourceActions= {type:"wheel",id: text,actions: [*input.WheelSourceAction] }input.WheelSourceAction= ( input.PauseAction / input.WheelScrollAction )input.PauseAction= {type:"pause", ?duration: js-uint }input.KeyDownAction= {type:"keyDown",value: text }input.KeyUpAction= {type:"keyUp",value: text }input.PointerUpAction= {type:"pointerUp",button: js-uint, }input.PointerDownAction= {type:"pointerDown",button: js-uint, input.PointerCommonProperties }input.PointerMoveAction= {type:"pointerMove",x: float,y: float, ?duration: js-uint, ?origin: input.Origin, input.PointerCommonProperties }input.WheelScrollAction= {type:"scroll",x: js-int,y: js-int,deltaX: js-int,deltaY: js-int, ?duration: js-uint, ?origin: input.Origin .default "viewport", }input.PointerCommonProperties= ( ?width: js-uint, ?height: js-uint, ?pressure: (0.0..1.0), ?tangentialPressure: (-1.0..1.0), ?twist: (0..359), ; 0 .. Math.PI / 2 ?altitudeAngle: (0.0..1.5707963267948966), ; 0 .. 2 * Math.PI ?azimuthAngle: (0.0..6.283185307179586), )input.Origin="viewport"/"pointer"/ input.ElementOrigin - 반환 타입
-
input.PerformActionsResult= EmptyResult
session 및 command parameters를 사용한 원격 끝 단계는 다음과 같다:
-
navigable id를 command parameters의
context필드 값으로 둔다. -
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
input state를 session 및 navigable의 top-level traversable로 input state 가져오기한 것으로 둔다.
-
actions options를, is element origin 단계가 is input.ElementOrigin으로 설정되고, get element origin 단계가 session이 주어졌을 때 get Element from input.ElementOrigin steps의 결과로 설정된 새 actions options로 둔다.
-
actions by tick를 input state, command parameters, 그리고 actions options로 action sequence 추출을 시도한 결과로 둔다.
-
input state, actions by tick, navigable, 그리고 actions options로 actions 디스패치를 시도한다.
-
데이터 null과 함께 success를 반환한다.
7.9.3.2. input.releaseActions 명령
input.releaseActions 명령은 현재 세션과 연관된 input state를 재설정한다.
- 명령 타입
-
input.ReleaseActions= (method:"input.releaseActions",params: input.ReleaseActionsParameters )input.ReleaseActionsParameters= {context: browsingContext.BrowsingContext, } - 반환 타입
-
input.ReleaseActionsResult= EmptyResult
session 및 command parameters가 주어졌을 때 원격 끝 단계는 다음과 같다:
-
navigable id를 command parameters의
context필드 값으로 둔다. -
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
top-level traversable을 navigable의 top-level traversable로 둔다.
-
input state를 session 및 top-level traversable로 input state 가져오기한 것으로 둔다.
-
actions options를, is element origin 단계가 is input.ElementOrigin으로 설정되고, get element origin 단계가 session이 주어진 get Element from input.ElementOrigin steps로 설정된 새 actions options로 둔다.
-
undo actions를 input state의 input cancel list를 역순으로 한 것으로 둔다.
-
undo actions, 0, navigable, 그리고 actions options로 tick actions 디스패치를 시도한다.
-
session 및 top-level traversable로 input state 재설정을 수행한다.
-
데이터 null과 함께 success를 반환한다.
7.9.3.3. input.setFiles 명령
input.setFiles 명령은 주어진 file 타입의
input 요소의 files 속성을
파일 경로 집합으로 설정한다.
- 명령 타입
-
input.SetFiles= (method:"input.setFiles",params: input.SetFilesParameters )input.SetFilesParameters= {context: browsingContext.BrowsingContext,element: script.SharedReference,files: [*text] } - 반환 타입
-
input.SetFilesResult= EmptyResult
session 및 command parameters가 주어졌을 때 원격 끝 단계는 다음과 같다:
-
navigable id를 command parameters["
context"] 필드 값으로 둔다. -
navigable을 navigable id로 navigable 가져오기를 시도한 결과로 둔다.
-
document를 navigable의 활성 문서로 둔다.
-
environment settings를 관련 전역 객체의 연관된
Document가 document인 환경 설정 객체로 둔다. -
realm을 environment settings의 realm 실행 컨텍스트의 Realm 컴포넌트로 둔다.
-
element를 command parameters["
element"], realm, 그리고 session로 원격 참조 역직렬화를 시도한 결과로 둔다. -
element가
Element를 구현하지 않으면, error를 error code no such element와 함께 반환한다. -
element가
HTMLInputElement를 구현하지 않거나, element의type이 File Upload state에 있지 않거나, 또는 element가 disabled이면, error를 error code unable to set file input과 함께 반환한다. -
files의 크기가 1보다 크고 element의
multiple속성이 설정되어 있지 않으면, error를 error code unable to set file input과 함께 반환한다. -
files를 command parameters["
files"] 필드 값으로 둔다. -
selected files를 element의 selected files로 둔다.
-
files와 selected files의 교집합의 크기가 selected files의 크기와 같고, files의 크기와도 같으면, element가 주어졌을 때 사용자 상호작용 task source에서 element에 대해
bubbles속성이 true로 초기화된cancel이라는 이름의 이벤트를 발화하도록 요소 task를 큐에 넣는다.참고: 브라우저에서 취소는 일반적으로 파일 선택의 변경으로 판단된다. 즉 변경이 없으면 "cancel" 이벤트가 전송된다.
-
그렇지 않으면, files를 사용자의 선택으로 하여 element에 대한 파일 선택을 갱신한다.
-
어떤 이유로든 원격 끝이 element의 selected files를 files에 주어진 경로의 파일로 설정할 수 없으면, error code unsupported operation과 함께 error를 반환한다.
참고: 예를 들어 원격 끝은 현재 파일 시스템에 존재하지 않는 파일을 selected files로 설정하지 못할 수 있다.
-
데이터 null과 함께 success를 반환한다.
7.9.4. 이벤트
7.9.4.1. input.fileDialogOpened 이벤트
- 이벤트 타입
-
input.FileDialogOpened= (method:"input.fileDialogOpened",params: input.FileDialogInfo )input.FileDialogInfo= {context: browsingContext.BrowsingContext, ?userContext: browser.UserContext, ?element: script.SharedReference,multiple: bool, }
WebDriver BiDi file picker options는 구조체로, boolean인 multiple이라는 항목을 가진다.
참고: 다른 사용자 프롬프트 핸들러와 달리 기본 동작은 파일 대화상자가 열리는 것을 허용하는 것이다.
-
navigable id를 navigable의 navigable id로 둔다.
-
user context id를 navigable의 연관된 사용자 컨텍스트의 사용자 컨텍스트 id로 둔다.
-
multiple을
false로 둔다. -
element가 null이 아니고 element의
multiple속성이 설정되어 있으면, multiple을true로 설정한다. -
file picker options가 null이 아니고 file picker options의 multiple이 true이면, multiple을
true로 설정한다. -
related navigables를 navigable을 포함하는 집합으로 둔다.
-
"
input.fileDialogOpened" 및 related navigables가 주어졌을 때의 이벤트가 활성화된 세션 집합에 있는 각 session에 대해:-
params를
context필드가 navigable id로,userContext필드가 user context id로,multiple필드가 multiple로 설정되고input.FileDialogInfo생성규칙과 일치하는 맵으로 둔다. -
element가 null이 아니면:
-
shared id를 element와 session으로 노드에 대한 shared id 가져오기를 수행한 것으로 둔다.
-
params["
element"]를 shared id로 설정한다.
-
-
body를
params필드가 params로 설정되고input.fileDialogOpened생성규칙과 일치하는 맵으로 둔다. -
session 및 body로 이벤트를 방출한다.
-
-
dismissed를 false로 둔다.
-
활성 BiDi 세션에 있는 각 session에 대해:
-
user prompt handler를 session의 user prompt handler로 둔다.
-
user prompt handler가 null이 아니면:
-
Assert user prompt handler는 맵이다.
-
user prompt handler가 "
file"을 포함하면:-
user prompt handler["
file"]이 "ignore"와 같지 않으면 dismissed를 true로 설정한다.
-
-
그렇지 않고 user prompt handler가 "
default"를 포함하며 user prompt handler["default"]가 "ignore"와 같지 않으면, dismissed를 true로 설정한다.
-
-
dismissed를 반환한다.
7.10. webExtension 모듈
webExtension 모듈은 웹 확장을 관리하고 상호작용하기 위한 기능을 포함한다.
7.10.1. 정의
WebExtensionCommand = (
webExtension.Install //
webExtension.Uninstall
)
WebExtensionResult = (
webExtension.InstallResult /
webExtension.UninstallResult
)
7.10.2. 타입
7.10.2.1. webExtension.Extension 타입
webExtension.Extension = text
webExtension.Extension 타입은 원격 끝 내의
웹 확장 id를 나타낸다.
7.10.3. 명령
7.10.3.1. webExtension.install 명령
webExtension.install 명령은 원격 끝에 웹 확장을 설치한다.
- 명령 타입
-
webExtension.Install= (method:"webExtension.install",params: webExtension.InstallParameters )webExtension.InstallParameters= {extensionData: webExtension.ExtensionData, }webExtension.ExtensionData= ( webExtension.ExtensionArchivePath / webExtension.ExtensionBase64Encoded / webExtension.ExtensionPath )webExtension.ExtensionPath= {type:"path",path: text, }webExtension.ExtensionArchivePath= {type:"archivePath",path: text, }webExtension.ExtensionBase64Encoded= {type:"base64",value: text, } - 반환 타입
-
webExtension.InstallResult= {extension: webExtension.Extension }
-
zip 압축 알고리즘을 사용하여 bytes를 디코딩하는 구현 정의 단계를 수행한다. TODO: zip 디코딩에 대한 더 나은 참조를 찾는다.
-
이전 단계가 실패하면(예: bytes가 유효한 zip 압축 데이터를 나타내지 않았기 때문에), error를 error code invalid web extension과 함께 반환한다. 그렇지 않으면 entry를 추출된 파일 시스템 엔트리를 포함하는 디렉터리 엔트리로 둔다.
-
entry를 반환한다.
-
type을 extension data spec["
type"]로 둔다. -
type을 사용한 웹 확장 설치가 지원되지 않으면 error를 error code unsupported operation과 함께 반환한다.
-
다음 조건과 관련 단계 목록에서, 관련 조건이 true인 첫 번째 단계 집합을 실행한다:
- type이 문자열 "
path"인 경우 -
-
path를 extension data spec["
path"]로 둔다. -
locator를 path인 path와 파일 시스템의 루트에 대응하는 root를 가진 디렉터리 locator로 둔다.
-
entry를 locator가 주어진 엔트리 찾기로 둔다.
-
- type이 문자열 "
archivePath"인 경우 -
-
archive path를 extension data spec["
path"]로 둔다. -
locator를 archive path인 path와 파일 시스템의 루트에 대응하는 root를 가진 파일 locator로 둔다.
-
archive entry를 locator가 주어진 엔트리 찾기로 둔다.
-
archive entry가 null이면 null을 반환한다.
-
bytes를 archive entry의 바이너리 데이터로 둔다.
-
entry를 bytes가 주어졌을 때 zip archive 추출을 시도한 결과로 둔다.
-
- type이 문자열 "
base64"인 경우 -
-
bytes를 extension data spec["
value"]를 forgiving-base64 decode한 것으로 둔다. -
bytes가 failure이면 null을 반환한다.
-
entry를 bytes가 주어졌을 때 zip archive 추출을 시도한 결과로 둔다.
-
- type이 문자열 "
-
entry를 반환한다.
-
웹 확장 설치가 지원되지 않으면 error를 error code unsupported operation과 함께 반환한다.
-
extension data spec를 command parameters["
extensionData"]로 둔다. -
extension directory entry를 extension data spec으로 web extension data spec 확장을 시도한 결과로 둔다.
-
extension directory entry가 null이면, error를 error code invalid web extension과 함께 반환한다.
-
extension directory entry에서 웹 확장을 설치하기 위한 구현 정의 단계를 수행한다. 이것이 실패하면 error를 error code invalid web extension과 함께 반환한다. 그렇지 않으면 extension id를 새로 설치된 웹 확장의 고유 식별자로 둔다.
-
result를
extension필드가 extension id로 설정되고webExtension.InstallResult생성규칙과 일치하는 맵으로 둔다. -
데이터 result와 함께 success를 반환한다.
참고: 브라우저는 기본적으로 웹 확장을 일시적으로만 설치할 수 있으며, 따라서 다음 종료 시 자동으로 제거될 수 있다.
7.10.3.2. webExtension.uninstall 명령
webExtension.uninstall 명령은 원격 끝에 대해 웹 확장을 제거한다.
- 명령 타입
-
webExtension.Uninstall= (method:"webExtension.uninstall",params: webExtension.UninstallParameters )webExtension.UninstallParameters= {extension: webExtension.Extension, } - 반환 타입
-
webExtension.UninstallResult= EmptyResult
-
extension을 command parameters["
extension"]으로 둔다. -
원격 끝에 extension과 같은 id를 가진 웹 확장이 없으면, error를 error code no such web extension과 함께 반환한다.
-
원격 끝에서 웹 확장을 제거하기 위한 임의의 구현 정의 단계를 수행한다. 이것이 실패하면 error를 error code unknown error와 함께 반환한다.
-
데이터 null과 함께 success를 반환한다.
8. 다른 명세에 대한 패치
이 명세는 필요한 통합 지점을 제공하기 위해 외부 명세에 대한 일부 변경을 요구한다. 이러한 패치는 표준화 과정의 일부로 다른 명세에 커밋될 것으로 가정한다.
8.1. HTML
오류 보고 알고리즘은 끝에 추가 단계가 있는 것으로 수정된다:
-
외부 명세에 정의된 모든 오류 보고 단계를 script, line, col, message, 그리고 오류가 처리된 경우 true, 그렇지 않은 경우 false와 함께 호출한다.
8.2. Console
다른 명세는 console steps를 정의할 수 있다.
-
Printer 연산이 인자 name, printerArgs 및 options(인자가 제공되지 않으면 undefined)로 호출되는 시점에, 외부 명세에 정의된 모든 console steps를 인자 name, printerArgs, 그리고 options와 함께 호출한다.
8.3. CSS
8.3.1. device pixel ratio 결정
device pixel ratio 결정 알고리즘의 시작 부분에 다음 단계를 삽입한다:
-
device pixel ratio overrides가 window의 navigable을 포함하면, device pixel ratio overrides[window의 navigable]를 반환한다.
9. 부록
이 섹션은 비규범적이다.
9.1. 외부 명세
참고: 이 목록은 완전하지 않으며 최신이 아닐 수 있다.
다음 외부 명세는 추가 WebDriver BiDi 모듈을 정의한다: