Class: Puppeteer::NetworkEventManager

Inherits:
Object
  • Object
show all
Defined in:
lib/puppeteer/network_event_manager.rb

Overview

Helper class to track network events by request ID

Instance Method Summary collapse

Constructor Details

#initializeNetworkEventManager

Returns a new instance of NetworkEventManager.



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/puppeteer/network_event_manager.rb', line 3

def initialize
  #
  # There are four possible orders of events:
  #  A. `_onRequestWillBeSent`
  #  B. `_onRequestWillBeSent`, `_onRequestPaused`
  #  C. `_onRequestPaused`, `_onRequestWillBeSent`
  #  D. `_onRequestPaused`, `_onRequestWillBeSent`, `_onRequestPaused`,
  #     `_onRequestWillBeSent`, `_onRequestPaused`, `_onRequestPaused`
  #     (see crbug.com/1196004)
  #
  # For `_onRequest` we need the event from `_onRequestWillBeSent` and
  # optionally the `interceptionId` from `_onRequestPaused`.
  #
  # If request interception is disabled, call `_onRequest` once per call to
  # `_onRequestWillBeSent`.
  # If request interception is enabled, call `_onRequest` once per call to
  # `_onRequestPaused` (once per `interceptionId`).
  #
  # Events are stored to allow for subsequent events to call `_onRequest`.
  #
  # Note that (chains of) redirect requests have the same `requestId` (!) as
  # the original request. We have to anticipate series of events like these:
  #  A. `_onRequestWillBeSent`,
  #     `_onRequestWillBeSent`, ...
  #  B. `_onRequestWillBeSent`, `_onRequestPaused`,
  #     `_onRequestWillBeSent`, `_onRequestPaused`, ...
  #  C. `_onRequestWillBeSent`, `_onRequestPaused`,
  #     `_onRequestPaused`, `_onRequestWillBeSent`, ...
  #  D. `_onRequestPaused`, `_onRequestWillBeSent`,
  #     `_onRequestPaused`, `_onRequestWillBeSent`, `_onRequestPaused`,
  #     `_onRequestWillBeSent`, `_onRequestPaused`, `_onRequestPaused`, ...
  #     (see crbug.com/1196004)
  @request_will_be_sent_map = {}
  @request_paused_map = {}
  @http_requests_map = {}
  #
  # The below maps are used to reconcile Network.responseReceivedExtraInfo
  # events with their corresponding request. Each response and redirect
  # response gets an ExtraInfo event, and we don't know which will come first.
  # This means that we have to store a Response or an ExtraInfo for each
  # response, and emit the event when we get both of them. In addition, to
  # handle redirects, we have to make them Arrays to represent the chain of
  # events.
  @response_received_extra_info_map = {}
  @queued_redirect_info_map = {}
  @queued_event_group_map = {}
end

Instance Method Details

#enqueue_event_group(network_request_id, queued_event_group) ⇒ Object



115
116
117
# File 'lib/puppeteer/network_event_manager.rb', line 115

def enqueue_event_group(network_request_id, queued_event_group)
  @queued_event_group_map[network_request_id] = queued_event_group
end

#enqueue_redirect_info(fetch_request_id, redirect_info) ⇒ Object



67
68
69
# File 'lib/puppeteer/network_event_manager.rb', line 67

def enqueue_redirect_info(fetch_request_id, redirect_info)
  queued_redirect_info(fetch_request_id) << redirect_info
end

#forget(network_request_id) ⇒ Object



51
52
53
54
55
56
57
# File 'lib/puppeteer/network_event_manager.rb', line 51

def forget(network_request_id)
  @request_will_be_sent_map.delete(network_request_id)
  @request_paused_map.delete(network_request_id)
  @queued_event_group_map.delete(network_request_id)
  @queued_redirect_info_map.delete(network_request_id)
  @response_received_extra_info_map.delete(network_request_id)
end

#forget_queued_event_group(network_request_id) ⇒ Object



123
124
125
# File 'lib/puppeteer/network_event_manager.rb', line 123

def forget_queued_event_group(network_request_id)
  @queued_event_group_map.delete(network_request_id)
end

#forget_request(network_request_id) ⇒ Object



111
112
113
# File 'lib/puppeteer/network_event_manager.rb', line 111

def forget_request(network_request_id)
  @http_requests_map.delete(network_request_id)
end

#forget_request_paused(network_request_id) ⇒ Object



99
100
101
# File 'lib/puppeteer/network_event_manager.rb', line 99

def forget_request_paused(network_request_id)
  @request_paused_map.delete(network_request_id)
end

#forget_request_will_be_sent(network_request_id) ⇒ Object



87
88
89
# File 'lib/puppeteer/network_event_manager.rb', line 87

def forget_request_will_be_sent(network_request_id)
  @request_will_be_sent_map.delete(network_request_id)
end

#get_queued_event_group(network_request_id) ⇒ Object



119
120
121
# File 'lib/puppeteer/network_event_manager.rb', line 119

def get_queued_event_group(network_request_id)
  @queued_event_group_map[network_request_id]
end

#get_request(network_request_id) ⇒ Object



107
108
109
# File 'lib/puppeteer/network_event_manager.rb', line 107

def get_request(network_request_id)
  @http_requests_map[network_request_id]
end

#get_request_paused(network_request_id) ⇒ Object



95
96
97
# File 'lib/puppeteer/network_event_manager.rb', line 95

def get_request_paused(network_request_id)
  @request_paused_map[network_request_id]
end

#get_request_will_be_sent(network_request_id) ⇒ Object



83
84
85
# File 'lib/puppeteer/network_event_manager.rb', line 83

def get_request_will_be_sent(network_request_id)
  @request_will_be_sent_map[network_request_id]
end

#num_requests_in_progressObject



75
76
77
# File 'lib/puppeteer/network_event_manager.rb', line 75

def num_requests_in_progress
  @http_requests_map.count { |_, request| !request.response }
end

#response_extra_info(network_request_id) ⇒ Object



59
60
61
# File 'lib/puppeteer/network_event_manager.rb', line 59

def response_extra_info(network_request_id)
  @response_received_extra_info_map[network_request_id] ||= []
end

#store_request(network_request_id, request) ⇒ Object



103
104
105
# File 'lib/puppeteer/network_event_manager.rb', line 103

def store_request(network_request_id, request)
  @http_requests_map[network_request_id] = request
end

#store_request_paused(network_request_id, event) ⇒ Object



91
92
93
# File 'lib/puppeteer/network_event_manager.rb', line 91

def store_request_paused(network_request_id, event)
  @request_paused_map[network_request_id] = event
end

#store_request_will_be_sent(network_request_id, event) ⇒ Object



79
80
81
# File 'lib/puppeteer/network_event_manager.rb', line 79

def store_request_will_be_sent(network_request_id, event)
  @request_will_be_sent_map[network_request_id] = event
end

#take_queued_redirect_info(fetch_request_id) ⇒ Object



71
72
73
# File 'lib/puppeteer/network_event_manager.rb', line 71

def take_queued_redirect_info(fetch_request_id)
  queued_redirect_info(fetch_request_id).shift
end