| 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 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 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 if (url.ProtocolIs("content")) | 122 if (url.ProtocolIs("content")) |
| 123 return true; | 123 return true; |
| 124 #endif | 124 #endif |
| 125 return false; | 125 return false; |
| 126 } | 126 } |
| 127 | 127 |
| 128 void MHTMLArchive::GenerateMHTMLHeader(const String& boundary, | 128 void MHTMLArchive::GenerateMHTMLHeader(const String& boundary, |
| 129 const String& title, | 129 const String& title, |
| 130 const String& mime_type, | 130 const String& mime_type, |
| 131 Vector<char>& output_buffer) { | 131 Vector<char>& output_buffer) { |
| 132 ASSERT(!boundary.IsEmpty()); | 132 DCHECK(!boundary.IsEmpty()); |
| 133 ASSERT(!mime_type.IsEmpty()); | 133 DCHECK(!mime_type.IsEmpty()); |
| 134 | 134 |
| 135 DateComponents now; | 135 DateComponents now; |
| 136 now.SetMillisecondsSinceEpochForDateTime(CurrentTimeMS()); | 136 now.SetMillisecondsSinceEpochForDateTime(CurrentTimeMS()); |
| 137 // TODO(lukasza): Passing individual date/time components seems fragile. | 137 // TODO(lukasza): Passing individual date/time components seems fragile. |
| 138 String date_string = MakeRFC2822DateString( | 138 String date_string = MakeRFC2822DateString( |
| 139 now.WeekDay(), now.MonthDay(), now.Month(), now.FullYear(), now.Hour(), | 139 now.WeekDay(), now.MonthDay(), now.Month(), now.FullYear(), now.Hour(), |
| 140 now.Minute(), now.Second(), 0); | 140 now.Minute(), now.Second(), 0); |
| 141 | 141 |
| 142 StringBuilder string_builder; | 142 StringBuilder string_builder; |
| 143 string_builder.Append("From: <Saved by Blink>\r\n"); | 143 string_builder.Append("From: <Saved by Blink>\r\n"); |
| 144 string_builder.Append("Subject: "); | 144 string_builder.Append("Subject: "); |
| 145 // We replace non ASCII characters with '?' characters to match IE's behavior. | 145 // We replace non ASCII characters with '?' characters to match IE's behavior. |
| 146 string_builder.Append(ReplaceNonPrintableCharacters(title)); | 146 string_builder.Append(ReplaceNonPrintableCharacters(title)); |
| 147 string_builder.Append("\r\nDate: "); | 147 string_builder.Append("\r\nDate: "); |
| 148 string_builder.Append(date_string); | 148 string_builder.Append(date_string); |
| 149 string_builder.Append("\r\nMIME-Version: 1.0\r\n"); | 149 string_builder.Append("\r\nMIME-Version: 1.0\r\n"); |
| 150 string_builder.Append("Content-Type: multipart/related;\r\n"); | 150 string_builder.Append("Content-Type: multipart/related;\r\n"); |
| 151 string_builder.Append("\ttype=\""); | 151 string_builder.Append("\ttype=\""); |
| 152 string_builder.Append(mime_type); | 152 string_builder.Append(mime_type); |
| 153 string_builder.Append("\";\r\n"); | 153 string_builder.Append("\";\r\n"); |
| 154 string_builder.Append("\tboundary=\""); | 154 string_builder.Append("\tboundary=\""); |
| 155 string_builder.Append(boundary); | 155 string_builder.Append(boundary); |
| 156 string_builder.Append("\"\r\n\r\n"); | 156 string_builder.Append("\"\r\n\r\n"); |
| 157 | 157 |
| 158 // We use utf8() below instead of ascii() as ascii() replaces CRLFs with ?? | 158 // We use utf8() below instead of ascii() as ascii() replaces CRLFs with ?? |
| 159 // (we still only have put ASCII characters in it). | 159 // (we still only have put ASCII characters in it). |
| 160 ASSERT(string_builder.ToString().ContainsOnlyASCII()); | 160 DCHECK(string_builder.ToString().ContainsOnlyASCII()); |
| 161 CString ascii_string = string_builder.ToString().Utf8(); | 161 CString ascii_string = string_builder.ToString().Utf8(); |
| 162 | 162 |
| 163 output_buffer.Append(ascii_string.data(), ascii_string.length()); | 163 output_buffer.Append(ascii_string.data(), ascii_string.length()); |
| 164 } | 164 } |
| 165 | 165 |
| 166 void MHTMLArchive::GenerateMHTMLPart(const String& boundary, | 166 void MHTMLArchive::GenerateMHTMLPart(const String& boundary, |
| 167 const String& content_id, | 167 const String& content_id, |
| 168 EncodingPolicy encoding_policy, | 168 EncodingPolicy encoding_policy, |
| 169 const SerializedResource& resource, | 169 const SerializedResource& resource, |
| 170 Vector<char>& output_buffer) { | 170 Vector<char>& output_buffer) { |
| 171 ASSERT(!boundary.IsEmpty()); | 171 DCHECK(!boundary.IsEmpty()); |
| 172 ASSERT(content_id.IsEmpty() || content_id[0] == '<'); | 172 ASSERT(content_id.IsEmpty() || content_id[0] == '<'); |
| 173 | 173 |
| 174 StringBuilder string_builder; | 174 StringBuilder string_builder; |
| 175 string_builder.Append("--"); | 175 string_builder.Append("--"); |
| 176 string_builder.Append(boundary); | 176 string_builder.Append(boundary); |
| 177 string_builder.Append("\r\n"); | 177 string_builder.Append("\r\n"); |
| 178 | 178 |
| 179 string_builder.Append("Content-Type: "); | 179 string_builder.Append("Content-Type: "); |
| 180 string_builder.Append(resource.mime_type); | 180 string_builder.Append(resource.mime_type); |
| 181 string_builder.Append("\r\n"); | 181 string_builder.Append("\r\n"); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 output_buffer.Append(encoded_data.data() + index, line_length); | 242 output_buffer.Append(encoded_data.data() + index, line_length); |
| 243 output_buffer.Append("\r\n", 2u); | 243 output_buffer.Append("\r\n", 2u); |
| 244 index += kMaximumLineLength; | 244 index += kMaximumLineLength; |
| 245 } while (index < encoded_data_length); | 245 } while (index < encoded_data_length); |
| 246 } | 246 } |
| 247 } | 247 } |
| 248 } | 248 } |
| 249 | 249 |
| 250 void MHTMLArchive::GenerateMHTMLFooterForTesting(const String& boundary, | 250 void MHTMLArchive::GenerateMHTMLFooterForTesting(const String& boundary, |
| 251 Vector<char>& output_buffer) { | 251 Vector<char>& output_buffer) { |
| 252 ASSERT(!boundary.IsEmpty()); | 252 DCHECK(!boundary.IsEmpty()); |
| 253 CString ascii_string = String("--" + boundary + "--\r\n").Utf8(); | 253 CString ascii_string = String("--" + boundary + "--\r\n").Utf8(); |
| 254 output_buffer.Append(ascii_string.data(), ascii_string.length()); | 254 output_buffer.Append(ascii_string.data(), ascii_string.length()); |
| 255 } | 255 } |
| 256 | 256 |
| 257 void MHTMLArchive::SetMainResource(ArchiveResource* main_resource) { | 257 void MHTMLArchive::SetMainResource(ArchiveResource* main_resource) { |
| 258 main_resource_ = main_resource; | 258 main_resource_ = main_resource; |
| 259 } | 259 } |
| 260 | 260 |
| 261 void MHTMLArchive::AddSubresource(ArchiveResource* resource) { | 261 void MHTMLArchive::AddSubresource(ArchiveResource* resource) { |
| 262 const KURL& url = resource->Url(); | 262 const KURL& url = resource->Url(); |
| 263 subresources_.Set(url, resource); | 263 subresources_.Set(url, resource); |
| 264 KURL cid_uri = MHTMLParser::ConvertContentIDToURI(resource->ContentID()); | 264 KURL cid_uri = MHTMLParser::ConvertContentIDToURI(resource->ContentID()); |
| 265 if (cid_uri.IsValid()) | 265 if (cid_uri.IsValid()) |
| 266 subresources_.Set(cid_uri, resource); | 266 subresources_.Set(cid_uri, resource); |
| 267 } | 267 } |
| 268 | 268 |
| 269 ArchiveResource* MHTMLArchive::SubresourceForURL(const KURL& url) const { | 269 ArchiveResource* MHTMLArchive::SubresourceForURL(const KURL& url) const { |
| 270 return subresources_.at(url.GetString()); | 270 return subresources_.at(url.GetString()); |
| 271 } | 271 } |
| 272 | 272 |
| 273 DEFINE_TRACE(MHTMLArchive) { | 273 DEFINE_TRACE(MHTMLArchive) { |
| 274 visitor->Trace(main_resource_); | 274 visitor->Trace(main_resource_); |
| 275 visitor->Trace(subresources_); | 275 visitor->Trace(subresources_); |
| 276 } | 276 } |
| 277 | 277 |
| 278 } // namespace blink | 278 } // namespace blink |
| OLD | NEW |