OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All Rights Reserved. | 2 * Copyright (C) 2011 Google Inc. All Rights Reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 | 50 |
51 void RawResource::didAddClient(ResourceClient* c) | 51 void RawResource::didAddClient(ResourceClient* c) |
52 { | 52 { |
53 if (!hasClient(c)) | 53 if (!hasClient(c)) |
54 return; | 54 return; |
55 // The calls to the client can result in events running, potentially causing | 55 // The calls to the client can result in events running, potentially causing |
56 // this resource to be evicted from the cache and all clients to be removed, | 56 // this resource to be evicted from the cache and all clients to be removed, |
57 // so a protector is necessary. | 57 // so a protector is necessary. |
58 ResourcePtr<RawResource> protect(this); | 58 ResourcePtr<RawResource> protect(this); |
59 RawResourceClient* client = static_cast<RawResourceClient*>(c); | 59 RawResourceClient* client = static_cast<RawResourceClient*>(c); |
60 size_t redirectCount = redirectChain().size(); | 60 for (const auto& redirect : redirectChain()) { |
61 for (size_t i = 0; i < redirectCount; i++) { | |
62 RedirectPair redirect = redirectChain()[i]; | |
63 ResourceRequest request(redirect.m_request); | 61 ResourceRequest request(redirect.m_request); |
64 client->redirectReceived(this, request, redirect.m_redirectResponse); | 62 client->redirectReceived(this, request, redirect.m_redirectResponse); |
65 if (!hasClient(c)) | 63 if (!hasClient(c)) |
66 return; | 64 return; |
67 } | 65 } |
68 ASSERT(redirectCount == redirectChain().size()); | |
69 | 66 |
70 if (!m_response.isNull()) | 67 if (!m_response.isNull()) |
71 client->responseReceived(this, m_response); | 68 client->responseReceived(this, m_response); |
72 if (!hasClient(c)) | 69 if (!hasClient(c)) |
73 return; | 70 return; |
74 if (m_data) | 71 if (m_data) |
75 client->dataReceived(this, m_data->data(), m_data->size()); | 72 client->dataReceived(this, m_data->data(), m_data->size()); |
76 if (!hasClient(c)) | 73 if (!hasClient(c)) |
77 return; | 74 return; |
78 Resource::didAddClient(client); | 75 Resource::didAddClient(client); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 if (m_resourceRequest.allowStoredCredentials() != newRequest.allowStoredCred
entials()) | 163 if (m_resourceRequest.allowStoredCredentials() != newRequest.allowStoredCred
entials()) |
167 return false; | 164 return false; |
168 | 165 |
169 // Ensure most headers match the existing headers before continuing. | 166 // Ensure most headers match the existing headers before continuing. |
170 // Note that the list of ignored headers includes some headers explicitly re
lated to caching. | 167 // Note that the list of ignored headers includes some headers explicitly re
lated to caching. |
171 // A more detailed check of caching policy will be performed later, this is
simply a list of | 168 // A more detailed check of caching policy will be performed later, this is
simply a list of |
172 // headers that we might permit to be different and still reuse the existing
Resource. | 169 // headers that we might permit to be different and still reuse the existing
Resource. |
173 const HTTPHeaderMap& newHeaders = newRequest.httpHeaderFields(); | 170 const HTTPHeaderMap& newHeaders = newRequest.httpHeaderFields(); |
174 const HTTPHeaderMap& oldHeaders = m_resourceRequest.httpHeaderFields(); | 171 const HTTPHeaderMap& oldHeaders = m_resourceRequest.httpHeaderFields(); |
175 | 172 |
176 HTTPHeaderMap::const_iterator end = newHeaders.end(); | 173 for (const auto& header : newHeaders) { |
177 for (HTTPHeaderMap::const_iterator i = newHeaders.begin(); i != end; ++i) { | 174 AtomicString headerName = header.key; |
178 AtomicString headerName = i->key; | 175 if (!shouldIgnoreHeaderForCacheReuse(headerName) && header.value != oldH
eaders.get(headerName)) |
179 if (!shouldIgnoreHeaderForCacheReuse(headerName) && i->value != oldHeade
rs.get(headerName)) | |
180 return false; | 176 return false; |
181 } | 177 } |
182 | 178 |
183 end = oldHeaders.end(); | 179 for (const auto& header : oldHeaders) { |
184 for (HTTPHeaderMap::const_iterator i = oldHeaders.begin(); i != end; ++i) { | 180 AtomicString headerName = header.key; |
185 AtomicString headerName = i->key; | 181 if (!shouldIgnoreHeaderForCacheReuse(headerName) && header.value != newH
eaders.get(headerName)) |
186 if (!shouldIgnoreHeaderForCacheReuse(headerName) && i->value != newHeade
rs.get(headerName)) | |
187 return false; | 182 return false; |
188 } | 183 } |
189 | 184 |
190 return true; | 185 return true; |
191 } | 186 } |
192 | 187 |
193 } // namespace blink | 188 } // namespace blink |
OLD | NEW |