webkit和blink在blob机制上不同的地方



  WebKit.dll!WebCore::BlobURL::createBlobURL(const WTF::String & originString) 行 76 C++
  WebKit.dll!WebCore::BlobURL::createPublicURL(WebCore::SecurityOrigin * securityOrigin) 行 47 C++
> WebKit.dll!WebCore::FileReaderLoader::start(WebCore::ScriptExecutionContext * scriptExecutionContext, WebCore::Blob * blob) 行 81 C++
  WebKit.dll!WebCore::FileReader::readInternal(WebCore::Blob * blob, WebCore::FileReaderLoader::ReadType type, int & ec) 行 149 C++
  WebKit.dll!WebCore::FileReader::readAsText(WebCore::Blob * blob, const WTF::String & encoding, int & ec) 行 113 C++
  WebKit.dll!WebCore::jsFileReaderPrototypeFunctionReadAsText(JSC::ExecState * exec) 行 565 C++




> WebKit.dll!WebCore::BlobResourceHandle::BlobResourceHandle(WebCore::BlobData * blobData, const WebCore::ResourceRequest & request, WebCore::ResourceHandleClient * client, bool async) 行 173 C++
  WebKit.dll!WebCore::BlobResourceHandle::createAsync(WebCore::BlobData * blobData, const WebCore::ResourceRequest & request, WebCore::ResourceHandleClient * client) 行 143 C++
  WebKit.dll!WebCore::BlobRegistryImpl::createResourceHandle(const WebCore::ResourceRequest & request, WebCore::ResourceHandleClient * client) 行 80 C++
  WebKit.dll!WebCore::createResourceHandle(const WebCore::ResourceRequest & request, WebCore::ResourceHandleClient * client) 行 59 C++
  WebKit.dll!WebCore::ResourceHandle::create(WebCore::NetworkingContext * context, const WebCore::ResourceRequest & request, WebCore::ResourceHandleClient * client, bool defersLoading, bool shouldContentSniff) 行 92 C++
  WebKit.dll!WebCore::ResourceLoader::start() 行 218 C++
  WebKit.dll!WebCore::ResourceLoadScheduler::servePendingRequests(WebCore::ResourceLoadScheduler::HostInformation * host, WebCore::ResourceLoadPriority minimumPriority) 行 285 C++
  WebKit.dll!WebCore::ResourceLoadScheduler::scheduleLoad(WebCore::ResourceLoader * resourceLoader) 行 189 C++
  WebKit.dll!WebCore::ResourceLoadScheduler::scheduleSubresourceLoad(WebCore::Frame * frame, WebCore::CachedResource * resource, const WebCore::ResourceRequest & request, const WebCore::ResourceLoaderOptions & options) 行 129 C++
  WebKit.dll!WebCore::CachedResource::load(WebCore::CachedResourceLoader & cachedResourceLoader, const WebCore::ResourceLoaderOptions & options) 行 281 C++
  WebKit.dll!WebCore::CachedResourceLoader::requestResource(WebCore::CachedResource::Type type, WebCore::CachedResourceRequest & request) 行 577 C++
  WebKit.dll!WebCore::CachedResourceLoader::requestRawResource(WebCore::CachedResourceRequest & request) 行 269 C++
  WebKit.dll!WebCore::DocumentThreadableLoader::loadRequest(const WebCore::ResourceRequest & request, WebCore::SecurityCheckPolicy securityCheck) 行 370 C++
  WebKit.dll!WebCore::DocumentThreadableLoader::DocumentThreadableLoader(WebCore::Document & document, WebCore::ThreadableLoaderClient & client, WebCore::DocumentThreadableLoader::BlockingBehavior blockingBehavior, const WebCore::ResourceRequest & request, const WebCore::ThreadableLoaderOptions & options) 行 84 C++
  WebKit.dll!WebCore::DocumentThreadableLoader::create(WebCore::Document & document, WebCore::ThreadableLoaderClient & client, const WebCore::ResourceRequest & request, const WebCore::ThreadableLoaderOptions & options) 行 65 C++
  WebKit.dll!WebCore::ThreadableLoader::create(WebCore::ScriptExecutionContext * context, WebCore::ThreadableLoaderClient * client, const WebCore::ResourceRequest & request, const WebCore::ThreadableLoaderOptions & options) 行 80 C++
  WebKit.dll!WebCore::FileReaderLoader::start(WebCore::ScriptExecutionContext * scriptExecutionContext, WebCore::Blob * blob) 行 103 C++
  WebKit.dll!WebCore::FileReader::readInternal(WebCore::Blob * blob, WebCore::FileReaderLoader::ReadType type, int & ec) 行 149 C++
  WebKit.dll!WebCore::FileReader::readAsText(WebCore::Blob * blob, const WTF::String & encoding, int & ec) 行 113 C++
  WebKit.dll!WebCore::jsFileReaderPrototypeFunctionReadAsText(JSC::ExecState * exec) 行 565 C++
  WebKit.dll!_vmEntryToJavaScript() 未知
  WebKit.dll!JSC::JITCode::execute(JSC::VM * vm, JSC::ProtoCallFrame * protoCallFrame) 行 81 C++
  WebKit.dll!JSC::Interpreter::executeCall(JSC::ExecState * callFrame, JSC::JSObject * function, JSC::CallType callType, const JSC::CallData & callData, JSC::JSValue thisValue, const JSC::ArgList & args) 行 965 C++
  WebKit.dll!JSC::call(JSC::ExecState * exec, JSC::JSValue functionObject, JSC::CallType callType, const JSC::CallData & callData, JSC::JSValue thisValue, const JSC::ArgList & args) 行 39 C++
  WebKit.dll!JSC::JSJobMicrotask::run(JSC::ExecState * exec) 行 73 C++
  WebKit.dll!WebCore::JSMainThreadExecState::runTask(JSC::ExecState * exec, JSC::Microtask & task) 行 75 C++
  WebKit.dll!WebCore::JSGlobalObjectCallback::call() 行 64 C++
  WebKit.dll!WebCore::JSGlobalObjectTask::{ctor}::__l2::<lambda>(WebCore::ScriptExecutionContext & __formal) 行 88 C++
  WebKit.dll!std::_Invoker_functor::_Call<void <lambda>(WebCore::ScriptExecutionContext &) &,WebCore::ScriptExecutionContext &>(WebCore::JSGlobalObjectTask::{ctor}::__l2::void <lambda>(WebCore::ScriptExecutionContext &) & _Obj, WebCore::ScriptExecutionContext & <_Args_0>) 行 1410 C++
  WebKit.dll!std::invoke<void <lambda>(WebCore::ScriptExecutionContext &) &,WebCore::ScriptExecutionContext &>(WebCore::JSGlobalObjectTask::{ctor}::__l2::void <lambda>(WebCore::ScriptExecutionContext &) & _Obj, WebCore::ScriptExecutionContext & <_Args_0>) 行 1476 C++
  WebKit.dll!std::_Invoke_ret<void,void <lambda>(WebCore::ScriptExecutionContext &) &,WebCore::ScriptExecutionContext &>(std::_Forced<void,1> __formal, WebCore::JSGlobalObjectTask::{ctor}::__l2::void <lambda>(WebCore::ScriptExecutionContext &) & <_Vals_0>, WebCore::ScriptExecutionContext & <_Vals_1>) 行 1494 C++
  WebKit.dll!std::_Func_impl<void <lambda>(WebCore::ScriptExecutionContext &),std::allocator<int>,void,WebCore::ScriptExecutionContext &>::_Do_call(WebCore::ScriptExecutionContext & <_Args_0>) 行 209 C++
  WebKit.dll!std::_Func_class<void,WebCore::DOMWindow &>::operator()(WebCore::DOMWindow & <_Args_0>) 行 276 C++
  WebKit.dll!WebCore::ScriptExecutionContext::Task::performTask(WebCore::ScriptExecutionContext & context) 行 151 C++
  WebKit.dll!WebCore::Document::postTask::__l2::<lambda>() 行 5208 C++
  WebKit.dll!std::_Invoker_functor::_Call<void <lambda>(void) &>(WebCore::Document::postTask::__l2::void <lambda>(void) & _Obj) 行 1410 C++
  WebKit.dll!std::invoke<void <lambda>(void) &>(WebCore::Document::postTask::__l2::void <lambda>(void) & _Obj) 行 1476 C++
  WebKit.dll!std::_Invoke_ret<void,void <lambda>(void) &>(std::_Forced<void,1> __formal, WebCore::Document::postTask::__l2::void <lambda>(void) & <_Vals_0>) 行 1494 C++
  WebKit.dll!std::_Func_impl<void <lambda>(void),std::allocator<int>,void>::_Do_call() 行 209 C++
  WebKit.dll!std::_Func_class<bool>::operator()() 行 276 C++
  WebKit.dll!WTF::dispatchFunctionsFromMainThread() 行 140 C++
  WebKit.dll!WTF::ThreadingWindowWndProc(HWND__ * hWnd, unsigned int message, unsigned int wParam, long lParam) 行 47 C++
  WebKit.dll!WebKitMessageLoop::run(HACCEL__ * hAccelTable) 行 97 C++
  MiniBrowser.exe!wWinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, wchar_t * lpstrCmdLine, int nCmdShow) 行 200 C++


webkit的代码是在XMLHttpRequest::didReceiveData里收到数据后,存到Blob里,然后在BlobResourceHandle里创建异步回调,模拟网络请求给FileReaderLoader去加载
> WebKit.dll!WebCore::FileReaderLoader::didReceiveData(const char * data, int dataLength) 行 179 C++
  WebKit.dll!WebCore::DocumentThreadableLoader::didReceiveData(unsigned long identifier, const char * data, int dataLength) 行 290 C++
  WebKit.dll!WebCore::DocumentThreadableLoader::dataReceived(WebCore::CachedResource * resource, const char * data, int dataLength) 行 277 C++
  WebKit.dll!WebCore::CachedRawResource::notifyClientsDataWasReceived(const char * data, unsigned int length) 行 119 C++
  WebKit.dll!WebCore::CachedRawResource::addData(const char * data, unsigned int length) 行 84 C++
  WebKit.dll!WebCore::SubresourceLoader::didReceiveDataOrBuffer(const char * data, int length, WTF::PassRefPtr<WebCore::SharedBuffer> prpBuffer, __int64 encodedDataLength, WebCore::DataPayloadType dataPayloadType) 行 296 C++
  WebKit.dll!WebCore::SubresourceLoader::didReceiveBuffer(WTF::PassRefPtr<WebCore::SharedBuffer> buffer, __int64 encodedDataLength, WebCore::DataPayloadType dataPayloadType) 行 274 C++
  WebKit.dll!WebCore::ResourceLoader::didReceiveBuffer(WebCore::ResourceHandle * __formal, WTF::PassRefPtr<WebCore::SharedBuffer> buffer, int encodedDataLength) 行 623 C++
  WebKit.dll!WebCore::BlobResourceHandle::notifyReceiveData(const char * data, int bytesRead) 行 639 C++
  WebKit.dll!WebCore::BlobResourceHandle::consumeData(const char * data, int bytesRead) 行 535 C++
  WebKit.dll!WebCore::BlobResourceHandle::readDataAsync(const WebCore::BlobDataItem & item) 行 480 C++
  WebKit.dll!WebCore::BlobResourceHandle::readAsync() 行 463 C++
  WebKit.dll!WebCore::BlobResourceHandle::getSizeForNext() 行 259 C++
  WebKit.dll!WebCore::BlobResourceHandle::didGetSize(__int64 size) 行 308 C++
  WebKit.dll!WebCore::BlobResourceHandle::getSizeForNext() 行 267 C++
  WebKit.dll!WebCore::BlobResourceHandle::doStart() 行 237 C++
  WebKit.dll!WebCore::BlobResourceHandle::start::__l2::<lambda>() 行 209 C++




而blink是先在XMLHttpRequest里存成一个临时文件再关联上一个blob,并在content层记录在BlobStorageHost里,再在FileReaderLoader里发起网络请求,content层
> content.dll!content::AsyncResourceHandler::OnReadCompleted(int bytes_read, bool * defer) 行 330 C++
  content.dll!content::MimeTypeResourceHandler::OnReadCompleted(int bytes_read, bool * defer) 行 170 C++
  content.dll!content::LayeredResourceHandler::OnReadCompleted(int bytes_read, bool * defer) 行 67 C++
  content.dll!content::ResourceLoader::CompleteRead(int bytes_read) 行 627 C++
  content.dll!content::ResourceLoader::OnReadCompleted(net::URLRequest * unused, int bytes_read) 行 382 C++
  net.dll!net::URLRequest::NotifyReadCompleted(int bytes_read) 行 1136 C++
  net.dll!net::URLRequestJob::NotifyReadComplete(int bytes_read) 行 527 C++
  storage.dll!storage::BlobURLRequestJob::DidReadRawData(int result) 行 231 C++
  storage.dll!base::internal::RunnableAdapter<void (__thiscall storage::BlobURLRequestJob::*)(int)>::Run(storage::BlobURLRequestJob * object, const int & <args_0>) 行 176 C++
  storage.dll!base::internal::InvokeHelper<1,void,base::internal::RunnableAdapter<void (__thiscall storage::BlobURLRequestJob::*)(int)>,base::internal::TypeList<base::WeakPtr<storage::BlobURLRequestJob> const &,int const &> >::MakeItSo(base::internal::RunnableAdapter<void (__thiscall storage::BlobURLRequestJob::*)(int)> runnable, const base::WeakPtr<storage::BlobURLRequestJob> & weak_ptr, const int & <args_0>) 行 304 C++
  storage.dll!base::internal::Invoker<base::IndexSequence<0>,base::internal::BindState<base::internal::RunnableAdapter<void (__thiscall storage::BlobURLRequestJob::*)(int)>,void __cdecl(storage::BlobURLRequestJob *,int),base::internal::TypeList<base::WeakPtr<storage::BlobURLRequestJob> > >,base::internal::TypeList<base::internal::UnwrapTraits<base::WeakPtr<storage::BlobURLRequestJob> > >,base::internal::InvokeHelper<1,void,base::internal::RunnableAdapter<void (__thiscall storage::BlobURLRequestJob::*)(int)>,base::internal::TypeList<base::WeakPtr<storage::BlobURLRequestJob> const &,int const &> >,void __cdecl(int const &)>::Run(base::internal::BindStateBase * base, const int & <unbound_args_0>) 行 343 C++
  storage.dll!base::Callback<void __cdecl(int)>::Run(const int & <args_0>) 行 396 C++
  storage.dll!storage::BlobReader::ContinueAsyncReadLoop() 行 426 C++
  storage.dll!storage::BlobReader::DidReadItem(int result) 行 478 C++
  storage.dll!storage::BlobReader::DidReadFile(int result) 行 416 C++


发起响应把数据给FileReaderLoader




在这里把blob存在文件里
> content.dll!content::RedirectToFileResourceHandler::OnResponseStarted(content::ResourceResponse * response, bool * defer) 行 162 C++
  content.dll!content::MimeTypeResourceHandler::ProcessResponse(bool * defer) 行 238 C++
  content.dll!content::MimeTypeResourceHandler::OnReadCompleted(int bytes_read, bool * defer) 行 180 C++
  content.dll!content::LayeredResourceHandler::OnReadCompleted(int bytes_read, bool * defer) 行 67 C++
  content.dll!content::ResourceLoader::CompleteRead(int bytes_read) 行 627 C++
  content.dll!content::ResourceLoader::OnReadCompleted(net::URLRequest * unused, int bytes_read) 行 382 C++
  content.dll!content::ResourceLoader::StartReading(bool is_continuation) 行 564 C++
  content.dll!content::ResourceLoader::OnReadCompleted(net::URLRequest * unused, int bytes_read) 行 387 C++
  content.dll!content::ResourceLoader::StartReading(bool is_continuation) 行 564 C++
  content.dll!content::ResourceLoader::OnResponseStarted(net::URLRequest * unused) 行 358 C++
  net.dll!net::URLRequest::NotifyResponseStarted() 行 819 C++
  net.dll!net::URLRequestJob::NotifyHeadersComplete() 行 481 C++
  net.dll!net::URLRequestHttpJob::NotifyHeadersComplete() 行 415 C++
  net.dll!net::URLRequestHttpJob::SaveNextCookie() 行 783 C++
  net.dll!net::URLRequestHttpJob::SaveCookiesAndNotifyHeadersComplete(int result) 行 730 C++
  net.dll!net::URLRequestHttpJob::OnStartCompleted(int result) 行 960 C++
  net.dll!base::internal::RunnableAdapter<void (__thiscall net::URLRequestHttpJob::*)(int)>::Run(net::URLRequestHttpJob * object, const int & <args_0>) 行 176 C++
  net.dll!base::internal::InvokeHelper<0,void,base::internal::RunnableAdapter<void (__thiscall net::URLRequestHttpJob::*)(int)>,base::internal::TypeList<net::URLRequestHttpJob *,int const &> >::MakeItSo(base::internal::RunnableAdapter<void (__thiscall net::URLRequestHttpJob::*)(int)> runnable, net::URLRequestHttpJob * <args_0>, const int & <args_1>) 行 294 C++
  net.dll!base::internal::Invoker<base::IndexSequence<0>,base::internal::BindState<base::internal::RunnableAdapter<void (__thiscall net::URLRequestHttpJob::*)(int)>,void __cdecl(net::URLRequestHttpJob *,int),base::internal::TypeList<base::internal::UnretainedWrapper<net::URLRequestHttpJob> > >,base::internal::TypeList<base::internal::UnwrapTraits<base::internal::UnretainedWrapper<net::URLRequestHttpJob> > >,base::internal::InvokeHelper<0,void,base::internal::RunnableAdapter<void (__thiscall net::URLRequestHttpJob::*)(int)>,base::internal::TypeList<net::URLRequestHttpJob *,int const &> >,void __cdecl(int const &)>::Run(base::internal::BindStateBase * base, const int & <unbound_args_0>) 行 343 C++
  net.dll!base::Callback<void __cdecl(int)>::Run(const int & <args_0>) 行 396 C++
  net.dll!net::HttpCache::Transaction::DoLoop(int result) 行 960 C++
  net.dll!net::HttpCache::Transaction::OnIOComplete(int result) 行 2940 C++
  net.dll!base::Callback<void __cdecl(int)>::Run(const int & <args_0>) 行 396 C++
  net.dll!net::HttpNetworkTransaction::DoCallback(int rv) 行 631 C++
  net.dll!net::HttpNetworkTransaction::OnIOComplete(int result) 行 637 C++
  net.dll!base::internal::Invoker<base::IndexSequence<0>,base::internal::BindState<base::internal::RunnableAdapter<void (__thiscall net::HttpNetworkTransaction::*)(int)>,void __cdecl(net::HttpNetworkTransaction *,int),base::internal::TypeList<base::internal::UnretainedWrapper<net::HttpNetworkTransaction> > >,base::internal::TypeList<base::internal::UnwrapTraits<base::internal::UnretainedWrapper<net::HttpNetworkTransaction> > >,base::internal::InvokeHelper<0,void,base::internal::RunnableAdapter<void (__thiscall net::HttpNetworkTransaction::*)(int)>,base::internal::TypeList<net::HttpNetworkTransaction *,int const &> >,void __cdecl(int const &)>::Run(base::internal::BindStateBase * base, const int & <unbound_args_0>) 行 343 C++
  net.dll!base::Callback<void __cdecl(int)>::Run(const int & <args_0>) 行 396 C++
  net.dll!net::HttpStreamParser::OnIOComplete(int result) 行 391 C++
net.dll!base::internal::Invoker<base::IndexSequence<0>,base::internal::BindState<base::internal::RunnableAdapter<void (__thiscall net::HttpStreamParser::*)(int)>,void __cdecl(net::HttpStreamParser *,int),base::internal::TypeList<base::WeakPtr<net::HttpStreamParser> > >,base::internal::TypeList<base::internal::UnwrapTraits<base::WeakPtr<net::HttpStreamParser> > >,base::internal::InvokeHelper<1,void,base::internal::RunnableAdapter<void (__thiscall net::HttpStreamParser::*)(int)>,base::internal::TypeList<base::WeakPtr<net::HttpStreamParser> const &,int const &> >,void __cdecl(int const &)>::Run(base::internal::BindStateBase * base, const int & <unbound_args_0>) 行 343 C++
  net.dll!base::Callback<void __cdecl(int)>::Run(const int & <args_0>) 行 396 C++
  net.dll!net::TCPClientSocket::DidCompleteReadWrite(const base::Callback<void __cdecl(int)> & callback, int result) 行 364 C++
  net.dll!net::TCPClientSocket::DidCompleteRead(const base::Callback<void __cdecl(int)> & callback, int result) 行 347 C++
  net.dll!base::Callback<void __cdecl(int)>::Run(const int & <args_0>) 行 396 C++
  net.dll!net::TCPSocketWin::DidSignalRead() 行 1048 C++
  net.dll!net::TCPSocketWin::Core::ReadDelegate::OnObjectSignaled(void * object) 行 258 C++
  base.dll!base::win::ObjectWatcher::Signal(base::win::ObjectWatcher::Delegate * delegate) 行 121 C++
  base.dll!base::internal::RunnableAdapter<void (__thiscall base::win::ObjectWatcher::*)(base::win::ObjectWatcher::Delegate *)>::Run(base::win::ObjectWatcher * object, base::win::ObjectWatcher::Delegate * const & <args_0>) 行 176 C++


xhr发出send blob请求:
XMLHttpRequest::createRequest
此时设置 request.setDownloadToFile(true);,告诉net层这玩意需要存在文件里


 在xhr发出send blob请求后,content层根据request.setDownloadToFile标志,转到文件里,并且在repose里设置一个文件路径
> content.dll!content::RedirectToFileResourceHandler::OnWillStart(const GURL & url, bool * defer) 行 173 C++
  content.dll!content::LayeredResourceHandler::OnWillStart(const GURL & url, bool * defer) 行 49 C++
  content.dll!content::ThrottlingResourceHandler::OnWillStart(const GURL & url, bool * defer) 行 81 C++
  content.dll!content::ResourceLoader::StartRequest() 行 161 C++
  content.dll!content::ResourceDispatcherHostImpl::StartLoading(content::ResourceRequestInfoImpl * info, const linked_ptr<content::ResourceLoader> & loader) 行 2208 C++
  content.dll!content::ResourceDispatcherHostImpl::BeginRequestInternal(scoped_ptr<net::URLRequest,base::DefaultDeleter<net::URLRequest> > request, scoped_ptr<content::ResourceHandler,base::DefaultDeleter<content::ResourceHandler> > handler) 行 2196 C++
  content.dll!content::ResourceDispatcherHostImpl::BeginRequest(int request_id, const ResourceHostMsg_Request & request_data, IPC::Message * sync_result, int route_id) 行 1398 C++
  content.dll!content::ResourceDispatcherHostImpl::OnRequestResource(int routing_id, int request_id, const ResourceHostMsg_Request & request_data) 行 1072 C++






 在xhr发出send blob请求后,content层转到文件里
> content.dll!content::RedirectToFileResourceHandler::Writer::Writer(content::RedirectToFileResourceHandler * handler, scoped_ptr<net::FileStream,base::DefaultDeleter<net::FileStream> > file_stream, storage::ShareableFileReference * deletable_file) 行 68 C++
  content.dll!content::RedirectToFileResourceHandler::DidCreateTemporaryFile(base::File::Error error_code, scoped_ptr<net::FileStream,base::DefaultDeleter<net::FileStream> > file_stream, storage::ShareableFileReference * deletable_file) 行 252 C++
  content.dll!base::internal::RunnableAdapter<void (__thiscall content::RedirectToFileResourceHandler::*)(enum base::File::Error,scoped_ptr<net::FileStream,base::DefaultDeleter<net::FileStream> >,storage::ShareableFileReference *)>::Run(content::RedirectToFileResourceHandler * object, const base::File::Error & <args_0>, scoped_ptr<net::FileStream,base::DefaultDeleter<net::FileStream> > <args_1>, storage::ShareableFileReference * const & <args_2>) 行 176 C++


然后在xhr结束后,在FileLoader发起网络请求后,storage层开始读取之前的本地路径
> storage.dll!storage::FileStreamReader::CreateForLocalFile(base::TaskRunner * task_runner, const base::FilePath & file_path, __int64 initial_offset, const base::Time & expected_modification_time) 行 31 C++
  storage.dll!storage::`anonymous namespace'::FileStreamReaderProviderImpl::CreateForLocalFile(base::TaskRunner * task_runner, const base::FilePath & file_path, __int64 initial_offset, const base::Time & expected_modification_time) 行 37 C++
  storage.dll!storage::BlobReader::CreateFileStreamReader(const storage::BlobDataItem & item, unsigned __int64 additional_offset) 行 526 C++
  storage.dll!storage::BlobReader::GetOrCreateFileReaderAtIndex(unsigned int index) 行 511 C++
  storage.dll!storage::BlobReader::CalculateSize(const base::Callback<void __cdecl(int)> & done) 行 74 C++
  storage.dll!storage::BlobURLRequestJob::DidStart() 行 176 C++
  storage.dll!base::internal::RunnableAdapter<void (__thiscall storage::BlobURLRequestJob::*)(void)>::Run(storage::BlobURLRequestJob * object) 行 176 C++


读到了本地路径下的blob内容
> storage.dll!storage::BlobReader::ReadFileItem(storage::FileStreamReader * reader, int bytes_to_read) 行 392 C++
  storage.dll!storage::BlobReader::ReadItem() 行 352 C++
  storage.dll!storage::BlobReader::ReadLoop(int * bytes_read) 行 301 C++
  storage.dll!storage::BlobReader::Read(net::IOBuffer * buffer, unsigned int dest_size, int * bytes_read, base::Callback<void __cdecl(int)> done) 行 181 C++
  storage.dll!storage::BlobURLRequestJob::ReadRawData(net::IOBuffer * dest, int dest_size, int * bytes_read) 行 93 C++
  net.dll!net::URLRequestJob::ReadRawDataHelper(net::IOBuffer * buf, int buf_size, int * bytes_read) 行 838 C++
  net.dll!net::URLRequestJob::Read(net::IOBuffer * buf, int buf_size, int * bytes_read) 行 120 C++
  net.dll!net::URLRequest::Read(net::IOBuffer * dest, int dest_size, int * bytes_read) 行 744 C++
  content.dll!content::ResourceLoader::ReadMore(int * bytes_read) 行 612 C++
  content.dll!content::ResourceLoader::StartReading(bool is_continuation) 行 560 C++
  content.dll!content::ResourceLoader::OnResponseStarted(net::URLRequest * unused) 行 358 C++
  net.dll!net::URLRequest::NotifyResponseStarted() 行 819 C++
  net.dll!net::URLRequestJob::NotifyHeadersComplete() 行 481 C++
  storage.dll!storage::BlobURLRequestJob::HeadersCompleted(net::HttpStatusCode status_code) 行 314 C++
  storage.dll!storage::BlobURLRequestJob::DidCalculateSize(int result) 行 220 C++
  storage.dll!base::internal::RunnableAdapter<void (__thiscall storage::BlobURLRequestJob::*)(int)>::Run(storage::BlobURLRequestJob * object, const int & <args_0>) 行 176 C++
  storage.dll!base::internal::InvokeHelper<1,void,base::internal::RunnableAdapter<void (__thiscall storage::BlobURLRequestJob::*)(int)>,base::internal::TypeList<base::WeakPtr<storage::BlobURLRequestJob> const &,int const &> >::MakeItSo(base::internal::RunnableAdapter<void (__thiscall storage::BlobURLRequestJob::*)(int)> runnable, const base::WeakPtr<storage::BlobURLRequestJob> & weak_ptr, const int & <args_0>) 行 304 C++
  storage.dll!base::internal::Invoker<base::IndexSequence<0>,base::internal::BindState<base::internal::RunnableAdapter<void (__thiscall storage::BlobURLRequestJob::*)(int)>,void __cdecl(storage::BlobURLRequestJob *,int),base::internal::TypeList<base::WeakPtr<storage::BlobURLRequestJob> > >,base::internal::TypeList<base::internal::UnwrapTraits<base::WeakPtr<storage::BlobURLRequestJob> > >,base::internal::InvokeHelper<1,void,base::internal::RunnableAdapter<void (__thiscall storage::BlobURLRequestJob::*)(int)>,base::internal::TypeList<base::WeakPtr<storage::BlobURLRequestJob> const &,int const &> >,void __cdecl(int const &)>::Run(base::internal::BindStateBase * base, const int & <unbound_args_0>) 行 343 C++
  storage.dll!base::Callback<void __cdecl(int)>::Run(const int & <args_0>) 行 396 C++
  storage.dll!storage::BlobReader::DidCountSize() 行 295 C++
  storage.dll!storage::BlobReader::DidGetFileItemLength(unsigned int index, __int64 result) 行 284 C++
  storage.dll!base::internal::RunnableAdapter<void (__thiscall storage::BlobReader::*)(unsigned int,__int64)>::Run(storage::BlobReader * object, const unsigned int & <args_0>, const __int64 & <args_1>) 行 176 C++


然后发消息给blink
> webcore_shared.dll!blink::FileReaderLoader::didReceiveData(const char * data, unsigned int dataLength) 行 237 C++
  webcore_shared.dll!blink::DocumentThreadableLoader::handleReceivedData(const char * data, unsigned int dataLength) 行 659 C++
  webcore_shared.dll!blink::DocumentThreadableLoader::dataReceived(blink::Resource * resource, const char * data, unsigned int dataLength) 行 647 C++
  webcore_shared.dll!blink::RawResource::appendData(const char * data, unsigned int length) 行 95 C++
  webcore_shared.dll!blink::ResourceLoader::didReceiveData(blink::WebURLLoader * __formal, const char * data, int length, int encodedDataLength) 行 421 C++
  content.dll!content::WebURLLoaderImpl::Context::OnReceivedData(scoped_ptr<content::RequestPeer::ReceivedData,base::DefaultDeleter<content::RequestPeer::ReceivedData> > data) 行 698 C++
  content.dll!content::ResourceDispatcher::OnReceivedData(int request_id, int data_offset, int data_length, int encoded_data_length) 行 262 C++



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值