1. receive data to parse
a .for chromium stack
WebUrlLoaderClient::didReceiveData
ResourceLoader::didReceiveData
MainResourceLoader::didReceiveData
ResourceLoader::didReceiveData
MainResourceLoader::addData
DocumentLoader::receivedData
DocumentLoader::commitLoad
FrameLoaderClient::committedLoad (FrameLoaderClientAndroid.cpp)
//also call ResourceLoader::didReceiveResponse
DocumentLoader::commitData(also call DocumentWrite:setEncoding to create the document.)
DocumentWriter::addData
DecodedDataDocumentParser::appendBytes
HTMLDocumentParser::append
HTMLDocumentParser::pumpTokenizerIfPossible
HTMLDocumentParser::pumpTokenizer
HTMLTokenizer::nextToken
//VC's receive sequence
a.ResourceLoader::didReceiveRespons
b.MainResourceLoader::didReceiveResponse
c.ResourceLoader::didReceiveRespons
d.ResourceLoader::didReceiveData
e.MainResourceLoader::didReceiveData
b.for apache
LoadListener::commitLoad
WebCoreResourceLoader::nativeAddData
WebCoreResourceLoader::AddData
ResourceHandleClient::didReceiveData
ResourceLoader::didReceiveData
MainResourceLoader::didReceiveData
ResourceLoader::didReceiveData
MainResourceLoader::addData
DocumentLoader::receivedData
DocumentLoader::commitLoad
FrameLoaderClientAndroid::committedLoad
DocumentLoader::commitData
DocumentWriter::addData
DecodedDataDocumentParser::appendBytes
HTMLDocumentParser::append
HTMLDocumentParser::pumpTokenizerIfPossible
HTMLDocumentParser::pumpTokenizer
HTMLTokenizer::nextToken
HTMLTokenizer::nextToken, generate HTMLTokenizer from document;
HTMLTreeBuilder::constructTreeFromToken, generate dom tree with HTMLTokenizer
PS:
The HTMLTreeBuilder was in HTMLDocumentParser, and
HTMLDocumentParse has memberships as below:
OwnPtr<HTMLTokenizer> m_tokenizer
OwnPtr<HTMLScriptRunner> m_scriptRunner;
OwnPtr<HTMLTreeBuilder> m_treeBuilder;
OwnPtr<HTMLPreloadScanner> m_preloadScanner;
OwnPtr<HTMLParserScheduler> m_parserScheduler;
HTMLSourceTracker m_sourceTracker;
XSSFilter m_xssFilter;
2 FrameLoaderClient::committedLoad
void FrameLoaderClientAndroid::committedLoad(DocumentLoader* loader,
const char* data, int length) {
if (!m_manualLoader)
loader->commitData(data, length);
// commit data may have created a manual plugin loader
if (m_manualLoader) {
if (!m_hasSentResponseToPlugin) {
m_manualLoader->didReceiveResponse(loader->response());
// Failure could cause the main document to have an error causing
// the manual loader to be reset.
if (!m_manualLoader)
return;
m_hasSentResponseToPlugin = true;
}
m_manualLoader->didReceiveData(data, length);
}
}
3.Document Create
MainResourceLoader::didReceiveData
ResourceLoader::didReceiveData
MainResourceLoader::addData
DocumentLoader::receivedData
DocumentLoader::commitLoad
WebFrameLoaderClient::committedLoad(FrameLoaderClient)
DocumentLoader::commitData (also callDocumentWriter::addData to Parser)
DocumentWriter::setEncoding
FrameLoader::willSetEncoding()
FrameLoader::receivedFirstData()
DocumentWriter::begin
DocumentWriter::createDocument() //after the document was created, it was set to the frame()
4. Accept type and DTD
4.1where to set the accept type
FrameLoader.cpp
static const char defaultAcceptHeader[] = "application/vnd.wap.xhtml+xml,application/xhtml+xml;profile='http://www.wapforum.org/xhtml',text/html,application/xml;q=0.9,*/*;q=0.8"
4.2change xml DTD type
XMLDocumentParserLibxml2.cpp
"internalSubset"
add "&& extId != "-//WAPFORUM//DTD WML 1.1//ZH"
5. the process from loadurl to network (chromium stack)
a.WebView.java
loadUrl
b.WebViewCore.java
loadUrl
c.BrowserFrame.java
loadUrl
nativeLoadUrl
d.WebCoreFrameBridge.cpp
LoadUrl
--pFrame->loader()->load(request, false);
e.FrameLoader
load(const ResourceRequest& request, bool lockHistory)
----FrameLoaderClient->createDocumentLoader()
load(DocumentLoader* newDocumentLoader)
----addExtraFieldsToMainResourceRequest
----loadWithDocumentLoader
callContinueLoadAfterNavigationPolicy()
continueLoadAfterWillSubmitForm()
f. DocumentLoader
startLoadingMainResource
g.MainResourceLoader
load
loadNow.
h.ResourceHandle
create
i.ResourceHandleAndroid.cpp
start
j.ResourceLoaderAndroid
start
k.WebUrlLoader
start
l.WebUrlLoaderClient
start.
......
to chromium stack.
see
also another imporant classes
ResourceRequest and ResourceResonse
for apache
from WebView.loadUrl() to ResourceLoaderAndroid.start() ,the same as above.
next
1. WebFrame::startLoadingResource
2.BrowserFrame.LoadListener startLoadingResource()//webkit java
3.FrameLoader.executeLoad()//webkit java
4.FrameLoader.handleHTTPLoad()
5.NetWork.requestURL() //webkit java
6.RequestQueue.queueSynchronousRequest()
7.RequestHandle.processRequest() //framework http java
8.Connection.processRequests(); //state send , framework http java
9.Request.sendRequest()
10.AndroidHttpClientConnection.sendRequestEntity();
11.EntitySerializer.serialize()
12.Connection.processRequests();// state read, framework http java
13.Request.readResponse()
14.AndroidHttpClientConnection.receiveResponseEntity();
15.BasicHttpEntity.receiveResponseEntity()
16.EventHandler.endData()
17.LoaderListener.endData() //webkit java
18.LoaderListener.handleMessage()
19.LoaderListener.handleHeaders/commitLoad()
20.LoaderListener.nativeAddData();
21.WebCoreResourceLoader:;AddData(); //webkit cpp
22. see
"1. receive data to parse" for apache
for Mms