| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "mojo/dart/embedder/io/filter.h" | 5 #include "mojo/dart/embedder/io/filter.h" |
| 6 | 6 |
| 7 namespace mojo { | 7 namespace mojo { |
| 8 namespace dart { | 8 namespace dart { |
| 9 | 9 |
| 10 const int kZLibFlagUseGZipHeader = 16; | 10 const int kZLibFlagUseGZipHeader = 16; |
| 11 const int kZLibFlagAcceptAnyHeader = 32; | 11 const int kZLibFlagAcceptAnyHeader = 32; |
| 12 | 12 |
| 13 static const int kFilterPointerNativeField = 0; | 13 static const int kFilterPointerNativeField = 0; |
| 14 | 14 |
| 15 Dart_Handle Filter::SetFilterPointerNativeField(Dart_Handle filter, | 15 static void DeleteFilter( |
| 16 Filter* filter_pointer) { | 16 void* isolate_data, |
| 17 return Dart_SetNativeInstanceField( | 17 Dart_WeakPersistentHandle handle, |
| 18 void* filter_pointer) { |
| 19 Filter* filter = reinterpret_cast<Filter*>(filter_pointer); |
| 20 delete filter; |
| 21 } |
| 22 |
| 23 Dart_Handle Filter::SetFilterAndCreateFinalizer(Dart_Handle filter, |
| 24 Filter* filter_pointer, |
| 25 intptr_t size) { |
| 26 Dart_Handle err = Dart_SetNativeInstanceField( |
| 18 filter, | 27 filter, |
| 19 kFilterPointerNativeField, | 28 kFilterPointerNativeField, |
| 20 reinterpret_cast<intptr_t>(filter_pointer)); | 29 reinterpret_cast<intptr_t>(filter_pointer)); |
| 30 if (Dart_IsError(err)) { |
| 31 return err; |
| 32 } |
| 33 Dart_NewWeakPersistentHandle(filter, |
| 34 reinterpret_cast<void*>(filter_pointer), |
| 35 size, |
| 36 DeleteFilter); |
| 37 return err; |
| 21 } | 38 } |
| 22 | 39 |
| 23 | 40 Dart_Handle Filter::GetFilterNativeField(Dart_Handle filter, |
| 24 Dart_Handle Filter::GetFilterPointerNativeField(Dart_Handle filter, | 41 Filter** filter_pointer) { |
| 25 Filter** filter_pointer) { | |
| 26 return Dart_GetNativeInstanceField( | 42 return Dart_GetNativeInstanceField( |
| 27 filter, | 43 filter, |
| 28 kFilterPointerNativeField, | 44 kFilterPointerNativeField, |
| 29 reinterpret_cast<intptr_t*>(filter_pointer)); | 45 reinterpret_cast<intptr_t*>(filter_pointer)); |
| 30 } | 46 } |
| 31 | 47 |
| 32 | |
| 33 ZLibDeflateFilter::~ZLibDeflateFilter() { | 48 ZLibDeflateFilter::~ZLibDeflateFilter() { |
| 34 delete[] dictionary_; | 49 delete[] dictionary_; |
| 35 delete[] current_buffer_; | 50 delete[] current_buffer_; |
| 36 if (initialized()) deflateEnd(&stream_); | 51 if (initialized()) { |
| 52 deflateEnd(&stream_); |
| 53 } |
| 37 } | 54 } |
| 38 | 55 |
| 39 | |
| 40 bool ZLibDeflateFilter::Init() { | 56 bool ZLibDeflateFilter::Init() { |
| 41 int window_bits = window_bits_; | 57 int window_bits = window_bits_; |
| 42 if (raw_) { | 58 if (raw_) { |
| 43 window_bits = -window_bits; | 59 window_bits = -window_bits; |
| 44 } else if (gzip_) { | 60 } else if (gzip_) { |
| 45 window_bits += kZLibFlagUseGZipHeader; | 61 window_bits += kZLibFlagUseGZipHeader; |
| 46 } | 62 } |
| 47 stream_.next_in = Z_NULL; | 63 stream_.next_in = Z_NULL; |
| 48 stream_.zalloc = Z_NULL; | 64 stream_.zalloc = Z_NULL; |
| 49 stream_.zfree = Z_NULL; | 65 stream_.zfree = Z_NULL; |
| 50 stream_.opaque = Z_NULL; | 66 stream_.opaque = Z_NULL; |
| 51 int result = deflateInit2(&stream_, level_, Z_DEFLATED, window_bits, | 67 int result = deflateInit2(&stream_, level_, Z_DEFLATED, window_bits, |
| 52 mem_level_, strategy_); | 68 mem_level_, strategy_); |
| 53 if (result != Z_OK) { | 69 if (result != Z_OK) { |
| 54 return false; | 70 return false; |
| 55 } | 71 } |
| 56 if (dictionary_ != NULL && !gzip_ && !raw_) { | 72 if ((dictionary_ != NULL) && !gzip_ && !raw_) { |
| 57 result = deflateSetDictionary(&stream_, dictionary_, dictionary_length_); | 73 result = deflateSetDictionary(&stream_, dictionary_, dictionary_length_); |
| 58 delete[] dictionary_; | 74 delete[] dictionary_; |
| 59 dictionary_ = NULL; | 75 dictionary_ = NULL; |
| 60 if (result != Z_OK) { | 76 if (result != Z_OK) { |
| 61 return false; | 77 return false; |
| 62 } | 78 } |
| 63 } | 79 } |
| 64 set_initialized(true); | 80 set_initialized(true); |
| 65 return true; | 81 return true; |
| 66 } | 82 } |
| 67 | 83 |
| 68 | |
| 69 bool ZLibDeflateFilter::Process(uint8_t* data, intptr_t length) { | 84 bool ZLibDeflateFilter::Process(uint8_t* data, intptr_t length) { |
| 70 if (current_buffer_ != NULL) return false; | 85 if (current_buffer_ != NULL) { |
| 86 return false; |
| 87 } |
| 71 stream_.avail_in = length; | 88 stream_.avail_in = length; |
| 72 stream_.next_in = current_buffer_ = data; | 89 stream_.next_in = current_buffer_ = data; |
| 73 return true; | 90 return true; |
| 74 } | 91 } |
| 75 | 92 |
| 76 intptr_t ZLibDeflateFilter::Processed(uint8_t* buffer, | 93 intptr_t ZLibDeflateFilter::Processed(uint8_t* buffer, |
| 77 intptr_t length, | 94 intptr_t length, |
| 78 bool flush, | 95 bool flush, |
| 79 bool end) { | 96 bool end) { |
| 80 stream_.avail_out = length; | 97 stream_.avail_out = length; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 96 case Z_STREAM_ERROR: | 113 case Z_STREAM_ERROR: |
| 97 error = true; | 114 error = true; |
| 98 } | 115 } |
| 99 | 116 |
| 100 delete[] current_buffer_; | 117 delete[] current_buffer_; |
| 101 current_buffer_ = NULL; | 118 current_buffer_ = NULL; |
| 102 // Either 0 Byte processed or error | 119 // Either 0 Byte processed or error |
| 103 return error ? -1 : 0; | 120 return error ? -1 : 0; |
| 104 } | 121 } |
| 105 | 122 |
| 106 | |
| 107 ZLibInflateFilter::~ZLibInflateFilter() { | 123 ZLibInflateFilter::~ZLibInflateFilter() { |
| 108 delete[] dictionary_; | 124 delete[] dictionary_; |
| 109 delete[] current_buffer_; | 125 delete[] current_buffer_; |
| 110 if (initialized()) inflateEnd(&stream_); | 126 if (initialized()) { |
| 127 inflateEnd(&stream_); |
| 128 } |
| 111 } | 129 } |
| 112 | 130 |
| 113 | |
| 114 bool ZLibInflateFilter::Init() { | 131 bool ZLibInflateFilter::Init() { |
| 115 int window_bits = raw_ ? | 132 int window_bits = raw_ ? |
| 116 -window_bits_ : | 133 -window_bits_ : |
| 117 window_bits_ | kZLibFlagAcceptAnyHeader; | 134 window_bits_ | kZLibFlagAcceptAnyHeader; |
| 118 | 135 |
| 119 stream_.next_in = Z_NULL; | 136 stream_.next_in = Z_NULL; |
| 120 stream_.avail_in = 0; | 137 stream_.avail_in = 0; |
| 121 stream_.zalloc = Z_NULL; | 138 stream_.zalloc = Z_NULL; |
| 122 stream_.zfree = Z_NULL; | 139 stream_.zfree = Z_NULL; |
| 123 stream_.opaque = Z_NULL; | 140 stream_.opaque = Z_NULL; |
| 124 int result = inflateInit2(&stream_, window_bits); | 141 int result = inflateInit2(&stream_, window_bits); |
| 125 if (result != Z_OK) { | 142 if (result != Z_OK) { |
| 126 return false; | 143 return false; |
| 127 } | 144 } |
| 128 set_initialized(true); | 145 set_initialized(true); |
| 129 return true; | 146 return true; |
| 130 } | 147 } |
| 131 | 148 |
| 132 | |
| 133 bool ZLibInflateFilter::Process(uint8_t* data, intptr_t length) { | 149 bool ZLibInflateFilter::Process(uint8_t* data, intptr_t length) { |
| 134 if (current_buffer_ != NULL) return false; | 150 if (current_buffer_ != NULL) { |
| 151 return false; |
| 152 } |
| 135 stream_.avail_in = length; | 153 stream_.avail_in = length; |
| 136 stream_.next_in = current_buffer_ = data; | 154 stream_.next_in = current_buffer_ = data; |
| 137 return true; | 155 return true; |
| 138 } | 156 } |
| 139 | 157 |
| 140 | |
| 141 intptr_t ZLibInflateFilter::Processed(uint8_t* buffer, | 158 intptr_t ZLibInflateFilter::Processed(uint8_t* buffer, |
| 142 intptr_t length, | 159 intptr_t length, |
| 143 bool flush, | 160 bool flush, |
| 144 bool end) { | 161 bool end) { |
| 145 stream_.avail_out = length; | 162 stream_.avail_out = length; |
| 146 stream_.next_out = buffer; | 163 stream_.next_out = buffer; |
| 147 bool error = false; | 164 bool error = false; |
| 148 int v; | 165 int v; |
| 149 switch (v = inflate(&stream_, | 166 switch (v = inflate(&stream_, |
| 150 end ? Z_FINISH : flush ? Z_SYNC_FLUSH : Z_NO_FLUSH)) { | 167 end ? Z_FINISH : flush ? Z_SYNC_FLUSH : Z_NO_FLUSH)) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 } | 199 } |
| 183 | 200 |
| 184 delete[] current_buffer_; | 201 delete[] current_buffer_; |
| 185 current_buffer_ = NULL; | 202 current_buffer_ = NULL; |
| 186 // Either 0 Byte processed or error | 203 // Either 0 Byte processed or error |
| 187 return error ? -1 : 0; | 204 return error ? -1 : 0; |
| 188 } | 205 } |
| 189 | 206 |
| 190 } // namespace dart | 207 } // namespace dart |
| 191 } // namespace mojo | 208 } // namespace mojo |
| OLD | NEW |