summaryrefslogtreecommitdiffstats
path: root/o3d/import/cross/archive_processor.cc
diff options
context:
space:
mode:
authorapatrick@google.com <apatrick@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-03 19:49:35 +0000
committerapatrick@google.com <apatrick@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-03 19:49:35 +0000
commit91240c947358b33cc19c0923a06d116ab36737dd (patch)
tree7897c99ad9b41d7735c7a42e0ea75fe6f76760b3 /o3d/import/cross/archive_processor.cc
parent2e25a9f4152a90a179ad37206bff79e1198379d7 (diff)
downloadchromium_src-91240c947358b33cc19c0923a06d116ab36737dd.zip
chromium_src-91240c947358b33cc19c0923a06d116ab36737dd.tar.gz
chromium_src-91240c947358b33cc19c0923a06d116ab36737dd.tar.bz2
Asynchronous tick now uses NPN_PluginAsyncCall.URL streaming callbacks are now also asynchronous.Implemented NPN_PluginAsyncCall for IE.Allowed WM_PAINT handler to be reentered because it no longer calls into the browser (except to schedule an asynchronous tick if none is pending).Fixed a bug where the EventManager would crash if an event callback called cleanUp on the client.Cleanup destroys all the packs. Doing this in NPP_Destroy seems to make Chrome timeout and fail to load the next page.Tar and GZ decoding happens on a new thread.
Review URL: http://codereview.chromium.org/155733 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@22305 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'o3d/import/cross/archive_processor.cc')
-rw-r--r--o3d/import/cross/archive_processor.cc71
1 files changed, 11 insertions, 60 deletions
diff --git a/o3d/import/cross/archive_processor.cc b/o3d/import/cross/archive_processor.cc
index 8601695..a10af1b 100644
--- a/o3d/import/cross/archive_processor.cc
+++ b/o3d/import/cross/archive_processor.cc
@@ -41,72 +41,30 @@ const int kChunkSize = 16384;
namespace o3d {
-#ifdef _DEBUG
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// For debugging only, report a zlib or i/o error
-void zerr(int ret) {
- LOG(ERROR) << "ArchiveProcessor: ";
-
- switch (ret) {
- case Z_ERRNO:
- if (ferror(stdin))
- LOG(ERROR) << "error reading stdin\n";
- if (ferror(stdout))
- LOG(ERROR) << "error writing stdout\n";
- break;
- case Z_STREAM_ERROR:
- LOG(ERROR) << "invalid compression level\n";
- break;
- case Z_DATA_ERROR:
- LOG(ERROR) << "invalid or incomplete deflate data\n";
- break;
- case Z_MEM_ERROR:
- LOG(ERROR) << "out of memory\n";
- break;
- case Z_VERSION_ERROR:
- LOG(ERROR) << "zlib version mismatch!\n";
- break;
- }
-}
-#endif // _DEBUG
-
-// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-int ArchiveProcessor::ProcessEntireStream(MemoryReadStream *stream) {
- int result = Z_OK;
- bool has_error = false;
+StreamProcessor::Status ArchiveProcessor::ProcessEntireStream(
+ MemoryReadStream *stream) {
+ Status status;
// decompress until deflate stream ends or error
do {
int remaining = stream->GetRemainingByteCount();
int process_this_time = remaining < kChunkSize ? remaining : kChunkSize;
- result = ProcessCompressedBytes(stream, process_this_time);
-
- has_error = (result != Z_OK && result != Z_STREAM_END);
+ status = ProcessBytes(stream, process_this_time);
+ } while (status == IN_PROGRESS);
-#ifdef _DEBUG
- if (has_error) {
- zerr(result);
- }
-#endif
- } while (result != Z_STREAM_END && !has_error);
-
- if (result == Z_STREAM_END) {
- // if we got to the end of stream, then we're good...
- result = Z_OK;
- }
-
- return result;
+ return status;
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-int ArchiveProcessor::ProcessFile(const char *filename) {
+StreamProcessor::Status ArchiveProcessor::ProcessFile(const char *filename) {
struct stat file_info;
int result = stat(filename, &file_info);
- if (result != 0) return -1;
+ if (result != 0) return FAILURE;
int file_length = file_info.st_size;
- if (file_length == 0) return -1;
+ if (file_length == 0) return FAILURE;
MemoryBuffer<uint8> buffer;
buffer.Allocate(file_length);
@@ -115,20 +73,13 @@ int ArchiveProcessor::ProcessFile(const char *filename) {
// Test by reading in a tar.gz file and sending through the
// progressive streaming system
FILE *fp = fopen(filename, "rb");
- if (!fp) return -1; // can't open file!
+ if (!fp) return FAILURE; // can't open file!
fread(p, sizeof(uint8), file_length, fp);
fclose(fp);
MemoryReadStream stream(p, file_length);
- result = ProcessEntireStream(&stream);
-
- if (result == Z_STREAM_END) {
- // if we got to the end of stream, then we're good...
- result = Z_OK;
- }
-
- return result;
+ return ProcessEntireStream(&stream);
}
} // namespace o3d