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
50
# 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 = {}
  @request_will_be_sent_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



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

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



73
74
75
# File 'lib/puppeteer/network_event_manager.rb', line 73

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

#forget(network_request_id) ⇒ Object



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

def forget(network_request_id)
  @request_will_be_sent_map.delete(network_request_id)
  @request_paused_map.delete(network_request_id)
  @request_will_be_sent_extra_info_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



130
131
132
# File 'lib/puppeteer/network_event_manager.rb', line 130

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

#forget_request(network_request_id) ⇒ Object



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

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

#forget_request_paused(network_request_id) ⇒ Object



105
106
107
# File 'lib/puppeteer/network_event_manager.rb', line 105

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

#forget_request_will_be_sent(network_request_id) ⇒ Object



93
94
95
# File 'lib/puppeteer/network_event_manager.rb', line 93

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



126
127
128
# File 'lib/puppeteer/network_event_manager.rb', line 126

def get_queued_event_group(network_request_id)
  @queued_event_group_map[network_request_id]
end

#get_request(network_request_id) ⇒ Object



113
114
115
# File 'lib/puppeteer/network_event_manager.rb', line 113

def get_request(network_request_id)
  @http_requests_map[network_request_id]
end

#get_request_paused(network_request_id) ⇒ Object



101
102
103
# File 'lib/puppeteer/network_event_manager.rb', line 101

def get_request_paused(network_request_id)
  @request_paused_map[network_request_id]
end

#get_request_will_be_sent(network_request_id) ⇒ Object



89
90
91
# File 'lib/puppeteer/network_event_manager.rb', line 89

def get_request_will_be_sent(network_request_id)
  @request_will_be_sent_map[network_request_id]
end

#num_requests_in_progressObject



81
82
83
# File 'lib/puppeteer/network_event_manager.rb', line 81

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

#request_extra_info(network_request_id) ⇒ Object



61
62
63
# File 'lib/puppeteer/network_event_manager.rb', line 61

def request_extra_info(network_request_id)
  @request_will_be_sent_extra_info_map[network_request_id] ||= []
end

#response_extra_info(network_request_id) ⇒ Object



65
66
67
# File 'lib/puppeteer/network_event_manager.rb', line 65

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

#store_request(network_request_id, request) ⇒ Object



109
110
111
# File 'lib/puppeteer/network_event_manager.rb', line 109

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

#store_request_paused(network_request_id, event) ⇒ Object



97
98
99
# File 'lib/puppeteer/network_event_manager.rb', line 97

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



85
86
87
# File 'lib/puppeteer/network_event_manager.rb', line 85

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



77
78
79
# File 'lib/puppeteer/network_event_manager.rb', line 77

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