OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 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 29 matching lines...) Expand all Loading... |
40 #include "core/html/HTMLAllCollection.h" | 40 #include "core/html/HTMLAllCollection.h" |
41 #include "core/html/HTMLFrameElementBase.h" | 41 #include "core/html/HTMLFrameElementBase.h" |
42 #include "core/html/HTMLFrameOwnerElement.h" | 42 #include "core/html/HTMLFrameOwnerElement.h" |
43 #include "core/html/HTMLInputElement.h" | 43 #include "core/html/HTMLInputElement.h" |
44 #include "core/html/HTMLTableElement.h" | 44 #include "core/html/HTMLTableElement.h" |
45 #include "core/loader/DocumentLoader.h" | 45 #include "core/loader/DocumentLoader.h" |
46 #include "platform/SerializedResource.h" | 46 #include "platform/SerializedResource.h" |
47 #include "platform/SharedBuffer.h" | 47 #include "platform/SharedBuffer.h" |
48 #include "platform/mhtml/MHTMLArchive.h" | 48 #include "platform/mhtml/MHTMLArchive.h" |
49 #include "platform/mhtml/MHTMLParser.h" | 49 #include "platform/mhtml/MHTMLParser.h" |
| 50 #include "platform/network/ResourceRequest.h" |
50 #include "platform/network/ResourceResponse.h" | 51 #include "platform/network/ResourceResponse.h" |
51 #include "platform/weborigin/KURL.h" | 52 #include "platform/weborigin/KURL.h" |
52 #include "public/platform/WebString.h" | 53 #include "public/platform/WebString.h" |
53 #include "public/platform/WebURL.h" | 54 #include "public/platform/WebURL.h" |
54 #include "public/platform/WebURLResponse.h" | 55 #include "public/platform/WebURLResponse.h" |
55 #include "public/platform/WebVector.h" | 56 #include "public/platform/WebVector.h" |
56 #include "public/web/WebDataSource.h" | 57 #include "public/web/WebDataSource.h" |
57 #include "public/web/WebDocument.h" | 58 #include "public/web/WebDocument.h" |
58 #include "public/web/WebFrame.h" | 59 #include "public/web/WebFrame.h" |
59 #include "public/web/WebFrameSerializerCacheControlPolicy.h" | 60 #include "public/web/WebFrameSerializerCacheControlPolicy.h" |
(...skipping 11 matching lines...) Expand all Loading... |
71 namespace blink { | 72 namespace blink { |
72 | 73 |
73 namespace { | 74 namespace { |
74 | 75 |
75 class MHTMLFrameSerializerDelegate final : public FrameSerializer::Delegate { | 76 class MHTMLFrameSerializerDelegate final : public FrameSerializer::Delegate { |
76 WTF_MAKE_NONCOPYABLE(MHTMLFrameSerializerDelegate); | 77 WTF_MAKE_NONCOPYABLE(MHTMLFrameSerializerDelegate); |
77 public: | 78 public: |
78 explicit MHTMLFrameSerializerDelegate(WebFrameSerializer::MHTMLPartsGenerati
onDelegate&); | 79 explicit MHTMLFrameSerializerDelegate(WebFrameSerializer::MHTMLPartsGenerati
onDelegate&); |
79 bool shouldIgnoreAttribute(const Attribute&) override; | 80 bool shouldIgnoreAttribute(const Attribute&) override; |
80 bool rewriteLink(const Element&, String& rewrittenLink) override; | 81 bool rewriteLink(const Element&, String& rewrittenLink) override; |
81 bool shouldSkipResource(const KURL&) override; | 82 bool shouldSkipResourceWithURL(const KURL&) override; |
| 83 bool shouldSkipResource(const Resource&) override; |
82 | 84 |
83 private: | 85 private: |
84 WebFrameSerializer::MHTMLPartsGenerationDelegate& m_webDelegate; | 86 WebFrameSerializer::MHTMLPartsGenerationDelegate& m_webDelegate; |
85 }; | 87 }; |
86 | 88 |
87 MHTMLFrameSerializerDelegate::MHTMLFrameSerializerDelegate( | 89 MHTMLFrameSerializerDelegate::MHTMLFrameSerializerDelegate( |
88 WebFrameSerializer::MHTMLPartsGenerationDelegate& webDelegate) | 90 WebFrameSerializer::MHTMLPartsGenerationDelegate& webDelegate) |
89 : m_webDelegate(webDelegate) | 91 : m_webDelegate(webDelegate) |
90 { | 92 { |
91 } | 93 } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 || doc->isXHTMLDocument() || doc->isImageDocument(); | 130 || doc->isXHTMLDocument() || doc->isImageDocument(); |
129 if (isHandledBySerializer) { | 131 if (isHandledBySerializer) { |
130 rewrittenLink = cidURI.getString(); | 132 rewrittenLink = cidURI.getString(); |
131 return true; | 133 return true; |
132 } | 134 } |
133 } | 135 } |
134 | 136 |
135 return false; | 137 return false; |
136 } | 138 } |
137 | 139 |
138 bool MHTMLFrameSerializerDelegate::shouldSkipResource(const KURL& url) | 140 bool MHTMLFrameSerializerDelegate::shouldSkipResourceWithURL(const KURL& url) |
139 { | 141 { |
140 return m_webDelegate.shouldSkipResource(url); | 142 return m_webDelegate.shouldSkipResource(url); |
141 } | 143 } |
142 | 144 |
143 } // namespace | 145 bool MHTMLFrameSerializerDelegate::shouldSkipResource(const Resource& resource) |
| 146 { |
| 147 return m_webDelegate.cacheControlPolicy() == WebFrameSerializerCacheControlP
olicy::SkipAnyFrameOrResourceMarkedNoStore |
| 148 && resource.hasCacheControlNoStoreHeader(); |
| 149 } |
144 | 150 |
145 bool WebFrameSerializer::generateMHTMLHeader( | 151 bool cacheControlNoStoreHeaderPresent(const WebLocalFrameImpl& webLocalFrameImpl
) |
146 const WebString& boundary, WebFrameSerializerCacheControlPolicy cacheControl
Policy, | 152 { |
147 WebLocalFrame* frame, WebData* data) | 153 const ResourceResponse& response = webLocalFrameImpl.dataSource()->response(
).toResourceResponse(); |
| 154 if (response.cacheControlContainsNoStore()) |
| 155 return true; |
| 156 |
| 157 const ResourceRequest& request = webLocalFrameImpl.dataSource()->request().t
oResourceRequest(); |
| 158 return request.cacheControlContainsNoStore(); |
| 159 } |
| 160 |
| 161 bool frameShouldBeSerializedAsMHTML(WebLocalFrame* frame, WebFrameSerializerCach
eControlPolicy cacheControlPolicy) |
148 { | 162 { |
149 WebLocalFrameImpl* webLocalFrameImpl = toWebLocalFrameImpl(frame); | 163 WebLocalFrameImpl* webLocalFrameImpl = toWebLocalFrameImpl(frame); |
150 DCHECK(webLocalFrameImpl); | 164 DCHECK(webLocalFrameImpl); |
151 | 165 |
152 if (cacheControlPolicy == WebFrameSerializerCacheControlPolicy::FailForNoSto
reMainFrame) { | 166 if (cacheControlPolicy == WebFrameSerializerCacheControlPolicy::None) |
153 const ResourceResponse& response = webLocalFrameImpl->dataSource()->resp
onse().toResourceResponse(); | 167 return true; |
154 if (response.cacheControlContainsNoStore()) | 168 |
155 return false; | 169 bool needToCheckNoStore = cacheControlPolicy == WebFrameSerializerCacheContr
olPolicy::SkipAnyFrameOrResourceMarkedNoStore |
156 } | 170 || (!frame->parent() && cacheControlPolicy == WebFrameSerializerCacheCon
trolPolicy::FailForNoStoreMainFrame); |
| 171 |
| 172 if (!needToCheckNoStore) |
| 173 return true; |
| 174 |
| 175 return !cacheControlNoStoreHeaderPresent(*webLocalFrameImpl); |
| 176 } |
| 177 |
| 178 } // namespace |
| 179 |
| 180 WebData WebFrameSerializer::generateMHTMLHeader( |
| 181 const WebString& boundary, WebLocalFrame* frame, MHTMLPartsGenerationDelegat
e* delegate) |
| 182 { |
| 183 DCHECK(frame); |
| 184 DCHECK(delegate); |
| 185 |
| 186 if (!frameShouldBeSerializedAsMHTML(frame, delegate->cacheControlPolicy())) |
| 187 return WebData(); |
| 188 |
| 189 WebLocalFrameImpl* webLocalFrameImpl = toWebLocalFrameImpl(frame); |
| 190 DCHECK(webLocalFrameImpl); |
157 | 191 |
158 Document* document = webLocalFrameImpl->frame()->document(); | 192 Document* document = webLocalFrameImpl->frame()->document(); |
159 | 193 |
160 RefPtr<SharedBuffer> buffer = SharedBuffer::create(); | 194 RefPtr<SharedBuffer> buffer = SharedBuffer::create(); |
161 MHTMLArchive::generateMHTMLHeader( | 195 MHTMLArchive::generateMHTMLHeader( |
162 boundary, document->title(), document->suggestedMIMEType(), | 196 boundary, document->title(), document->suggestedMIMEType(), |
163 *buffer); | 197 *buffer); |
164 *data = buffer.release(); | 198 return buffer.release(); |
165 return true; | |
166 } | 199 } |
167 | 200 |
168 WebData WebFrameSerializer::generateMHTMLParts( | 201 WebData WebFrameSerializer::generateMHTMLParts( |
169 const WebString& boundary, WebLocalFrame* webFrame, bool useBinaryEncoding, | 202 const WebString& boundary, WebLocalFrame* webFrame, MHTMLPartsGenerationDele
gate* webDelegate) |
170 MHTMLPartsGenerationDelegate* webDelegate) | |
171 { | 203 { |
172 DCHECK(webFrame); | 204 DCHECK(webFrame); |
173 DCHECK(webDelegate); | 205 DCHECK(webDelegate); |
174 | 206 |
| 207 if (!frameShouldBeSerializedAsMHTML(webFrame, webDelegate->cacheControlPolic
y())) |
| 208 return WebData(); |
| 209 |
175 // Translate arguments from public to internal blink APIs. | 210 // Translate arguments from public to internal blink APIs. |
176 LocalFrame* frame = toWebLocalFrameImpl(webFrame)->frame(); | 211 LocalFrame* frame = toWebLocalFrameImpl(webFrame)->frame(); |
177 MHTMLArchive::EncodingPolicy encodingPolicy = useBinaryEncoding | 212 MHTMLArchive::EncodingPolicy encodingPolicy = webDelegate->useBinaryEncoding
() |
178 ? MHTMLArchive::EncodingPolicy::UseBinaryEncoding | 213 ? MHTMLArchive::EncodingPolicy::UseBinaryEncoding |
179 : MHTMLArchive::EncodingPolicy::UseDefaultEncoding; | 214 : MHTMLArchive::EncodingPolicy::UseDefaultEncoding; |
180 | 215 |
181 // Serialize. | 216 // Serialize. |
182 Vector<SerializedResource> resources; | 217 Vector<SerializedResource> resources; |
183 MHTMLFrameSerializerDelegate coreDelegate(*webDelegate); | 218 MHTMLFrameSerializerDelegate coreDelegate(*webDelegate); |
184 FrameSerializer serializer(resources, coreDelegate); | 219 FrameSerializer serializer(resources, coreDelegate); |
185 serializer.serializeFrame(*frame); | 220 serializer.serializeFrame(*frame); |
186 | 221 |
187 // Get Content-ID for the frame being serialized. | 222 // Get Content-ID for the frame being serialized. |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 WebString WebFrameSerializer::generateBaseTagDeclaration(const WebString& baseTa
rget) | 273 WebString WebFrameSerializer::generateBaseTagDeclaration(const WebString& baseTa
rget) |
239 { | 274 { |
240 // TODO(yosin) We should call |FrameSerializer::baseTagDeclarationOf()|. | 275 // TODO(yosin) We should call |FrameSerializer::baseTagDeclarationOf()|. |
241 if (baseTarget.isEmpty()) | 276 if (baseTarget.isEmpty()) |
242 return String("<base href=\".\">"); | 277 return String("<base href=\".\">"); |
243 String baseString = "<base href=\".\" target=\"" + static_cast<const String&
>(baseTarget) + "\">"; | 278 String baseString = "<base href=\".\" target=\"" + static_cast<const String&
>(baseTarget) + "\">"; |
244 return baseString; | 279 return baseString; |
245 } | 280 } |
246 | 281 |
247 } // namespace blink | 282 } // namespace blink |
OLD | NEW |