| Index: tools/android/loading/request_dependencies_lens.py
|
| diff --git a/tools/android/loading/request_dependencies_lens.py b/tools/android/loading/request_dependencies_lens.py
|
| index 4a72a4f1d6bee1242ca1649c0809c6b8e2eb06fb..168954797bff5bfb5d015945f5211257a3b54ee6 100644
|
| --- a/tools/android/loading/request_dependencies_lens.py
|
| +++ b/tools/android/loading/request_dependencies_lens.py
|
| @@ -30,6 +30,7 @@ class RequestDependencyLens(object):
|
| self._requests = self.loading_trace.request_track.GetEvents()
|
| self._requests_by_id = {r.request_id: r for r in self._requests}
|
| self._requests_by_url = collections.defaultdict(list)
|
| + self._deps = None
|
| for request in self._requests:
|
| self._requests_by_url[request.url].append(request)
|
| self._frame_to_parent = {}
|
| @@ -45,12 +46,36 @@ class RequestDependencyLens(object):
|
| request_track.Request, and reason is in DEPENDENCIES. The second request
|
| depends on the first one, with the listed reason.
|
| """
|
| - deps = []
|
| + self._ComputeRequestDependencies()
|
| + return copy.copy(self._deps)
|
| +
|
| + def GetRedirectChain(self, request):
|
| + """Returns the whole redirect chain for a given request.
|
| +
|
| + Note that this misses some JS-based redirects.
|
| +
|
| + Returns:
|
| + A list of request, containing the request passed as a parameter.
|
| + """
|
| + self._ComputeRequestDependencies()
|
| + chain = [request]
|
| + while True:
|
| + for (first_request, second_request, why) in self._deps:
|
| + if first_request == request and why == 'redirect':
|
| + chain.append(second_request)
|
| + request = second_request
|
| + break
|
| + else:
|
| + return chain
|
| +
|
| + def _ComputeRequestDependencies(self):
|
| + if self._deps is not None:
|
| + return
|
| + self._deps = []
|
| for request in self._requests:
|
| dependency = self._GetDependency(request)
|
| if dependency:
|
| - deps.append(dependency)
|
| - return deps
|
| + self._deps.append(dependency)
|
|
|
| def _GetDependency(self, request):
|
| """Returns (first, second, reason), or None.
|
|
|