OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010, 2011, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2010, 2011, 2012 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 are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 30 matching lines...) Expand all Loading... |
41 #include "platform/network/HTTPParsers.h" | 41 #include "platform/network/HTTPParsers.h" |
42 #include "platform/network/ResourceError.h" | 42 #include "platform/network/ResourceError.h" |
43 #include "public/platform/WebHTTPHeaderVisitor.h" | 43 #include "public/platform/WebHTTPHeaderVisitor.h" |
44 #include "public/platform/WebString.h" | 44 #include "public/platform/WebString.h" |
45 #include "public/platform/WebURLError.h" | 45 #include "public/platform/WebURLError.h" |
46 #include "public/platform/WebURLLoaderClient.h" | 46 #include "public/platform/WebURLLoaderClient.h" |
47 #include "public/platform/WebURLRequest.h" | 47 #include "public/platform/WebURLRequest.h" |
48 #include "public/web/WebDataSource.h" | 48 #include "public/web/WebDataSource.h" |
49 #include "web/WebLocalFrameImpl.h" | 49 #include "web/WebLocalFrameImpl.h" |
50 #include "wtf/HashSet.h" | 50 #include "wtf/HashSet.h" |
51 #include "wtf/PtrUtil.h" | |
52 #include "wtf/text/WTFString.h" | 51 #include "wtf/text/WTFString.h" |
53 #include <limits.h> | 52 #include <limits.h> |
54 #include <memory> | |
55 | 53 |
56 namespace blink { | 54 namespace blink { |
57 | 55 |
58 namespace { | 56 namespace { |
59 | 57 |
60 class HTTPRequestHeaderValidator : public WebHTTPHeaderVisitor { | 58 class HTTPRequestHeaderValidator : public WebHTTPHeaderVisitor { |
61 WTF_MAKE_NONCOPYABLE(HTTPRequestHeaderValidator); | 59 WTF_MAKE_NONCOPYABLE(HTTPRequestHeaderValidator); |
62 public: | 60 public: |
63 HTTPRequestHeaderValidator() : m_isSafe(true) { } | 61 HTTPRequestHeaderValidator() : m_isSafe(true) { } |
64 | 62 |
65 void visitHeader(const WebString& name, const WebString& value); | 63 void visitHeader(const WebString& name, const WebString& value); |
66 bool isSafe() const { return m_isSafe; } | 64 bool isSafe() const { return m_isSafe; } |
67 | 65 |
68 private: | 66 private: |
69 bool m_isSafe; | 67 bool m_isSafe; |
70 }; | 68 }; |
71 | 69 |
72 void HTTPRequestHeaderValidator::visitHeader(const WebString& name, const WebStr
ing& value) | 70 void HTTPRequestHeaderValidator::visitHeader(const WebString& name, const WebStr
ing& value) |
73 { | 71 { |
74 m_isSafe = m_isSafe && isValidHTTPToken(name) && !FetchUtils::isForbiddenHea
derName(name) && isValidHTTPHeaderValue(value); | 72 m_isSafe = m_isSafe && isValidHTTPToken(name) && !FetchUtils::isForbiddenHea
derName(name) && isValidHTTPHeaderValue(value); |
75 } | 73 } |
76 | 74 |
77 } // namespace | 75 } // namespace |
78 | 76 |
79 // This class bridges the interface differences between WebCore and WebKit loade
r clients. | 77 // This class bridges the interface differences between WebCore and WebKit loade
r clients. |
80 // It forwards its ThreadableLoaderClient notifications to a WebURLLoaderClient. | 78 // It forwards its ThreadableLoaderClient notifications to a WebURLLoaderClient. |
81 class AssociatedURLLoader::ClientAdapter final : public DocumentThreadableLoader
Client { | 79 class AssociatedURLLoader::ClientAdapter final : public DocumentThreadableLoader
Client { |
82 WTF_MAKE_NONCOPYABLE(ClientAdapter); | 80 WTF_MAKE_NONCOPYABLE(ClientAdapter); |
83 public: | 81 public: |
84 static std::unique_ptr<ClientAdapter> create(AssociatedURLLoader*, WebURLLoa
derClient*, const WebURLLoaderOptions&); | 82 static PassOwnPtr<ClientAdapter> create(AssociatedURLLoader*, WebURLLoaderCl
ient*, const WebURLLoaderOptions&); |
85 | 83 |
86 // ThreadableLoaderClient | 84 // ThreadableLoaderClient |
87 void didSendData(unsigned long long /*bytesSent*/, unsigned long long /*tota
lBytesToBeSent*/) override; | 85 void didSendData(unsigned long long /*bytesSent*/, unsigned long long /*tota
lBytesToBeSent*/) override; |
88 void didReceiveResponse(unsigned long, const ResourceResponse&, std::unique_
ptr<WebDataConsumerHandle>) override; | 86 void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<W
ebDataConsumerHandle>) override; |
89 void didDownloadData(int /*dataLength*/) override; | 87 void didDownloadData(int /*dataLength*/) override; |
90 void didReceiveData(const char*, unsigned /*dataLength*/) override; | 88 void didReceiveData(const char*, unsigned /*dataLength*/) override; |
91 void didReceiveCachedMetadata(const char*, int /*dataLength*/) override; | 89 void didReceiveCachedMetadata(const char*, int /*dataLength*/) override; |
92 void didFinishLoading(unsigned long /*identifier*/, double /*finishTime*/) o
verride; | 90 void didFinishLoading(unsigned long /*identifier*/, double /*finishTime*/) o
verride; |
93 void didFail(const ResourceError&) override; | 91 void didFail(const ResourceError&) override; |
94 void didFailRedirectCheck() override; | 92 void didFailRedirectCheck() override; |
95 // DocumentThreadableLoaderClient | 93 // DocumentThreadableLoaderClient |
96 void willFollowRedirect(ResourceRequest& /*newRequest*/, const ResourceRespo
nse& /*redirectResponse*/) override; | 94 void willFollowRedirect(ResourceRequest& /*newRequest*/, const ResourceRespo
nse& /*redirectResponse*/) override; |
97 | 95 |
98 // Sets an error to be reported back to the client, asychronously. | 96 // Sets an error to be reported back to the client, asychronously. |
(...skipping 19 matching lines...) Expand all Loading... |
118 AssociatedURLLoader* m_loader; | 116 AssociatedURLLoader* m_loader; |
119 WebURLLoaderClient* m_client; | 117 WebURLLoaderClient* m_client; |
120 WebURLLoaderOptions m_options; | 118 WebURLLoaderOptions m_options; |
121 WebURLError m_error; | 119 WebURLError m_error; |
122 | 120 |
123 Timer<ClientAdapter> m_errorTimer; | 121 Timer<ClientAdapter> m_errorTimer; |
124 bool m_enableErrorNotifications; | 122 bool m_enableErrorNotifications; |
125 bool m_didFail; | 123 bool m_didFail; |
126 }; | 124 }; |
127 | 125 |
128 std::unique_ptr<AssociatedURLLoader::ClientAdapter> AssociatedURLLoader::ClientA
dapter::create(AssociatedURLLoader* loader, WebURLLoaderClient* client, const We
bURLLoaderOptions& options) | 126 PassOwnPtr<AssociatedURLLoader::ClientAdapter> AssociatedURLLoader::ClientAdapte
r::create(AssociatedURLLoader* loader, WebURLLoaderClient* client, const WebURLL
oaderOptions& options) |
129 { | 127 { |
130 return wrapUnique(new ClientAdapter(loader, client, options)); | 128 return adoptPtr(new ClientAdapter(loader, client, options)); |
131 } | 129 } |
132 | 130 |
133 AssociatedURLLoader::ClientAdapter::ClientAdapter(AssociatedURLLoader* loader, W
ebURLLoaderClient* client, const WebURLLoaderOptions& options) | 131 AssociatedURLLoader::ClientAdapter::ClientAdapter(AssociatedURLLoader* loader, W
ebURLLoaderClient* client, const WebURLLoaderOptions& options) |
134 : m_loader(loader) | 132 : m_loader(loader) |
135 , m_client(client) | 133 , m_client(client) |
136 , m_options(options) | 134 , m_options(options) |
137 , m_errorTimer(this, &ClientAdapter::notifyError) | 135 , m_errorTimer(this, &ClientAdapter::notifyError) |
138 , m_enableErrorNotifications(false) | 136 , m_enableErrorNotifications(false) |
139 , m_didFail(false) | 137 , m_didFail(false) |
140 { | 138 { |
(...skipping 12 matching lines...) Expand all Loading... |
153 } | 151 } |
154 | 152 |
155 void AssociatedURLLoader::ClientAdapter::didSendData(unsigned long long bytesSen
t, unsigned long long totalBytesToBeSent) | 153 void AssociatedURLLoader::ClientAdapter::didSendData(unsigned long long bytesSen
t, unsigned long long totalBytesToBeSent) |
156 { | 154 { |
157 if (!m_client) | 155 if (!m_client) |
158 return; | 156 return; |
159 | 157 |
160 m_client->didSendData(m_loader, bytesSent, totalBytesToBeSent); | 158 m_client->didSendData(m_loader, bytesSent, totalBytesToBeSent); |
161 } | 159 } |
162 | 160 |
163 void AssociatedURLLoader::ClientAdapter::didReceiveResponse(unsigned long, const
ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle) | 161 void AssociatedURLLoader::ClientAdapter::didReceiveResponse(unsigned long, const
ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle) |
164 { | 162 { |
165 ASSERT_UNUSED(handle, !handle); | 163 ASSERT_UNUSED(handle, !handle); |
166 if (!m_client) | 164 if (!m_client) |
167 return; | 165 return; |
168 | 166 |
169 if (m_options.exposeAllResponseHeaders || m_options.crossOriginRequestPolicy
!= WebURLLoaderOptions::CrossOriginRequestPolicyUseAccessControl) { | 167 if (m_options.exposeAllResponseHeaders || m_options.crossOriginRequestPolicy
!= WebURLLoaderOptions::CrossOriginRequestPolicyUseAccessControl) { |
170 // Use the original ResourceResponse. | 168 // Use the original ResourceResponse. |
171 m_client->didReceiveResponse(m_loader, WrappedResourceResponse(response)
); | 169 m_client->didReceiveResponse(m_loader, WrappedResourceResponse(response)
); |
172 return; | 170 return; |
173 } | 171 } |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 // there could be a WebURLLoader instance behind the | 449 // there could be a WebURLLoader instance behind the |
452 // DocumentThreadableLoader instance. So, for safety, we chose to just | 450 // DocumentThreadableLoader instance. So, for safety, we chose to just |
453 // crash here. | 451 // crash here. |
454 RELEASE_ASSERT(ThreadState::current()); | 452 RELEASE_ASSERT(ThreadState::current()); |
455 | 453 |
456 m_observer->dispose(); | 454 m_observer->dispose(); |
457 m_observer = nullptr; | 455 m_observer = nullptr; |
458 } | 456 } |
459 | 457 |
460 } // namespace blink | 458 } // namespace blink |
OLD | NEW |