青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++博客 聯系 聚合 管理  

Blog Stats

文章分類(17)

收藏夾(2)

文章檔案(18)

相冊

Blogs

citywanderer

一、讀取url





以下內容部分引自http://blog.csdn.net/dlmu2001/article/details/5936122
http的協議細節實現并不需要WebCore來關注,WebCore要關注的是,如何設置請求的相關頭部信息,如何獲取服務器返回回來的響應體部數據。
WebKit中同http打交道的類主要是ResourceRequest,ResourceResonse,ResourceHandle*,ResourceHandleManager等,這里先介紹同請求信息維護相關的ResourceRequest.
ResourceRequest類的作用比較好理解,基本上就是維護http請求相關的信息(app或者內核都有可能設置這些信息),然后當WebCore發起http請求的時候,可以獲取這些信息,調用curl的接口設置對應的http請求字段。在這些信息中,最常用到的是url。
ResourceRequest類繼承于ResourceRequestBase類,絕大部分功能在ResourceRequestBase類中實現。
一)ResourceRequest構造:構造一個ResourceRequest對象只需要url參數就夠了,這是比較簡單的一個類,沒有維護其它類的對象或者句柄。
ResourceRequest(const String& url);
ResourceRequest(const KURL& url);
二)ResourceRequest對象的創建與維護
1.當用戶輸入網址,觸發qt事件,由MainWindow(WebKitBuild/Debug/QtTestBrowser/moc_mainwindow.cpp:87<--moc_launcherwindow.cpp:145)調用changeLocation函數(另有openLocation等)。
MainWindow(Tools/QtTestBrowser/mainwindow.cpp:194)獲取地址欄中的url(QString類型/usr/include/QtCore/qstring.h),創建QUrl類型(/usr/include/QtCore/qurl.h url規格化類,包括host、port、scheme等成員變量),加載頁面(page()->mainFrame()->load(url) page()函數是全局函數?)。

最終調用QWebFrame::load(Source/WebKit/qt/Api/qwebframe.cpp:885)函數,在該函數中,會構造出ResourceRequest(Source/WebCore/platform/network/qt/ResourceRequest.h繼承ResourceRequestBaseSource/WebCore/platform/network/ResourceRequestBase.cpp)對象,并將這個對象作為一個參數,調用FrameLoader對象的load函數(Source/WebCore/loader/FrameLoader.cpp:1450)。

FrameLoader類負責將documents加載到Frames。當你點擊一個鏈接的時候,FrameLoader創建一個新的處于”policy”狀態的DocumentLoader對象,等待WebKit客戶端決定是否處理這個加載。通常WebKit客戶端會指示FrameLoader將這個加載視為一個導航(navigation),而不是阻止加載等。

DocumentLoader類中會維護這個ResourceRequest(FrameLoader.cpp:1460),policyChecker()
——>checkNavigationPolicy(
Source/WebCore/loader/FrameLoader.cpp:1585)
1585         policyChecker()->checkNavigationPolicy(loader->request(), loader, formState,
1586             callContinueLoadAfterNavigationPolicythis);//回調函數?如下調用

——>m_frame->loader()->client()->dispatchDecidePolicyForNavigationAction(Source/WebCore/loader/PolicyChecker.cpp:87)
 84     m_callback.set(request, formState.get(), function, argument);//callContinueLoadAfterNavigationPolicy


一旦客戶端指示FrameLoader將本次加載視為一個導航,FrameLoader就推動DocumentLoader進入”provisional”狀態,在該狀態,DocumentLoader會發起一個網絡請求,并等待以確定網絡請求將發起一個下載還是一個新的document。
——>page->d->acceptNavigationRequestSource/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:1271)
        callPolicyFunction(Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:1283)
        回調函數?如上
         //——>(m_frame->loader()->policyChecker()->*function)(action) (245)
——>callback.call(Source/WebCore/loader/PolicyChecker.cpp:160)
——>m_navigationFunction(Source/WebCore/loader/PolicyCallback.cpp:103)
——>loader->continueLoadAfterNavigationPolicy(Source/WebCore/loader/FrameLoader.cpp:2977)

2974 void FrameLoader::callContinueLoadAfterNavigationPolicy(void* argument,
2975     const ResourceRequest& request, PassRefPtr<FormState> formState, bool shouldContinue)
2976 {
2977     FrameLoader* loader = static_cast<FrameLoader*>(argument);
2978     loader->continueLoadAfterNavigationPolicy(request, formState, shouldContinue);
2979 }

——>continueLoadAfterWillSubmitForm(Source/WebCore/loader/FrameLoader.cpp:3105)
——>m_provisionalDocumentLoader->startLoadingMainResource(Source/WebCore/loader/FrameLoader.cpp:2572)

接下去,DocumentLoader會創建一個MainResourceLoader對象,這個對象主要用來通過ResourceHandle接口同平臺網絡庫進行交互。將MainResourceLoader和DocumentLoader分開來主要有兩個目的:(1)MainResourceLoader讓DocumentLoader從處理ResourceHandle回調的細節中抽身出來(2)降低MainResourceLoader的生命周期和DocumentLoader的生命周期(同Document綁定)的耦合度。

——>m_mainResourceLoader->load(Source/WebCore/loader/DocumentLoader.cpp:798)
——>loadNow(Source/WebCore/loader/MainResourceLoader.cpp:612)
——>ResourceHandle::create(Source/WebCore/loader/MainResourceLoader.cpp:585)
——>newHandle->start(Source/WebCore/platform/network/ResourceHandle.cpp:71)
——>new QNetworkReplyHandler(Source/WebCore/platform/network/qt/ResourceHandleQt.cpp:100)
       ——>r.toNetworkRequest(Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:399) 設置http頭
——>m_queue.push 提交事件? (Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:401)
——>flush();(Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:164)         
——>(m_replyHandler->*(m_enqueuedCalls.takeFirst()))();Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:195)
——>QNetworkReplyHandler::start() (Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:659)
        建立連接(ESTABLISHED)、發送請求 665QNetworkReply* reply = sendNetworkRequest(d->m_context->networkAccessManager(), d->m_firstRequest); 
         ——>601 WebCore::QNetworkReplyHandler::sendNetworkRequest 
               ——>626 manager->get(m_request)
      665     QNetworkReply* reply = sendNetworkRequest(d->m_context->networkAccessManager(), d->m_firstRequest);
      669     m_replyWrapper = new QNetworkReplyWrapper(&m_queue, reply, m_resourceHandle->shouldContentSniff() && d->m_context-
    >mimeSniffingEnabled(), this);
               ——>208 QNetworkReplyWrapper::QNetworkReplyWrapper(QNetworkReplyHandlerCallQueue* queue, QNetworkReply* reply, bool
    sniffMIMETypes, QObject* parent)
                  209     : QObject(parent)
                  210     , m_reply(reply)
                  211     , m_queue(queue)
                  212     , m_responseContainsData(false)
                  213     , m_sniffMIMETypes(sniffMIMETypes)
                  214 {
                   215     Q_ASSERT(m_reply);
                  216 
                  217     // setFinished() must be the first that we connect, so isFinished() is updated when running other slots.
                   //QT通過此種方式異步回調??(yes, 信號、槽機制,http://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/signal-slot/ )
                  218     connect(m_reply, SIGNAL(finished()), this, SLOT(setFinished()));
                  219     connect(m_reply, SIGNAL(finished()), this, SLOT(receiveMetaData()));
                  220     connect(m_reply, SIGNAL(readyRead()), this, SLOT(receiveMetaData()));
                  221 }

一旦加載系統接收到足夠的信息可以確定資源確實代表了document,FrameLoader就將DocumentLoader推向”committed”狀態,在該狀態中,frame將顯示document。



下載完了之后
——>QtMIMETypeSniffer::qt_metacall() (WebKitBuild/Debug/WebCore/moc_QtMIMETypeSniffer.cpp:77)
——>trySniffing()(Source/WebCore/platform/network/qt/QtMIMETypeSniffer.cpp:59
      ——>m_sniffer.sniff(data.constData(), data.size())(Source/WebCore/platform/network/qt/QtMIMETypeSniffer.cpp:51)

 50     QByteArray data = m_reply->peek(m_sniffer.dataSize());
 
51     const char* sniffedMimeType = m_sniffer.sniff(data.constData(), data.size());
       data.constData()保存著網頁內容,涉及的變量包括m_replym_sniffer

      ——>emit finished (Source/WebCore/platform/network/qt/QtMIMETypeSniffer.cpp:65)    
      ——>QMetaObject::activate(WebKitBuild/Debug/WebCore/moc_QtMIMETypeSniffer.cpp:88)
      ……
      WebCore::QNetworkReplyWrapper::qt_metacall (WebKitBuild/Debug/WebCore/moc_QNetworkReplyHandler.cpp)
77     if (_c == QMetaObject::InvokeMetaMethod) {
 
78         switch (_id) {
 
79         case 0: receiveMetaData(); break;
 
80         case 1: didReceiveFinished(); break;
 
81         case 2: didReceiveReadyRead(); break;
 
82         case 3: receiveSniffedMIMEType(); break;
 
83         case 4: setFinished(); break;
 
84         default: ;
 
85         }

 
86         _id -= 5;
 
87     }

      ——>receiveSniffedMIMEType()(WebKitBuild/Debug/WebCore/moc_QNetworkReplyHandler.cpp:82)
      ——>emitMetaDataChanged()(Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:305)
         ——>QueueLocker lock(m_queue)(Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp)
         ——>~QueueLocker() { m_queue->unlock(); } (203)
         ——>flush();(178)
         ——>(m_replyHandler->*(m_enqueuedCalls.takeFirst()))(); (195)
         
         ——>1、QNetworkReplyHandler::forwardData (572)
         ——>client->didReceiveData(m_resourceHandle, data.constData(), data.length(), -1); (586)
      ——>ResourceLoader::didReceiveData(ResourceHandle*, const char* data, int length, int encodedDataLength) (Source/WebCore/loader/ResourceLoader.cpp:427)
               data指向保存頁面內容
      ——>MainResourceLoader::didReceiveData (Source/WebCore/loader/MainResourceLoader.cpp:431)
      ——>ResourceLoader::didReceiveData (Source/WebCore/loader/ResourceLoader.cpp:267)
279     addData(data, length, allAtOnce);
280     // FIXME: If we get a resource with more than 2B bytes, this code won't do the right thing.
281     // However, with today's computers and networking speeds, this won't happen in practice.
282     // Could be an issue with a giant local file.
283     if (m_sendResourceLoadCallbacks && m_frame)
284         frameLoader()->notifier()->didReceiveData(this, data, length, static_cast<int>(encodedDataLength));
            保存頁面到cache 函數: addData()
      ——>ResourceLoadNotifier::didReceiveData (Source/WebCore/loader/ResourceLoadNotifier.cpp:77)
         ——>ResourceLoadNotifier::dispatchDidReceiveContentLength (133)
      ——>InspectorInstrumentation::didReceiveContentLengthSource/WebCore/inspector/InspectorInstrumentation.h:713)
      ——>InspectorInstrumentation::didReceiveContentLengthImplSource/WebCore/inspector/InspectorInstrumentation.cpp:487)
 
html解析     
      ——>2、QNetworkReplyHandler::finish(Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp:437)
      ——>ResourceLoader::didFinishLoading (Source/WebCore/loader/ResourceLoader.cpp:434)
      ——>MainResourceLoader::didFinishLoading (Source/WebCore/loader/MainResourceLoader.cpp:466)
      ——>FrameLoader::finishedLoading (Source/WebCore/loader/FrameLoader.cpp:2287)
      ——>DocumentLoader::finishedLoading (Source/WebCore/loader/DocumentLoader.cpp:282)
         ——>FrameLoader::finishedLoadingDocument(DocumentLoader* loader) (Source/WebCore/loader/FrameLoader.cpp:2333)
            ——>FrameLoaderClientQt::finishedLoading(DocumentLoader* loader) (Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp:626)
         ——>DocumentWriter::end() (Source/WebCore/loader/DocumentWriter.cpp:211)
211 void DocumentWriter::end()
212 {
213     m_frame->loader()->didEndDocument();
214     endIfNotLoadingMainResource();
215 }
            213 ——>Document::finishParsing() (Source/WebCore/dom/Document.cpp:2246)
            214: DocumentWriter::endIfNotLoadingMainResource() (Source/WebCore/loader/DocumentWriter.cpp  228
228     addData(00true);
229     m_frame->document()->finishParsing();
               ——>DocumentWriter::addData() (208)               
                  ——>DecodedDataDocumentParser::appendBytes(DocumentWriter* writer , const char* data, int length, bool shouldFlush)Source/WebCore/dom/DecodedDataDocumentParser.cpp:40)
                  ——> HTMLDocumentParser::append(const SegmentedString& source) (Source/WebCore/html/parser/HTMLDocumentParser.cpp:367)
                  ——> HTMLDocumentParser::pumpTokenizerIfPossible(SynchronousMode mode) (175)
                  ——> HTMLDocumentParser::pumpTokenizer(SynchronousMode mode) (261)
                  解析、執行script
                     ——> HTMLDocumentParser::canTakeNextToken(SynchronousMode mode, PumpSession& session) (223)
                     ——> HTMLDocumentParser::runScriptsForPausedTreeBuilder() (205)
                     ——> HTMLScriptRunner::execute(PassRefPtr<Element> scriptElement, const TextPosition1& scriptStartPosition) Source/WebCore/html/parser/HTMLScriptRunner.cpp:167)
                     ——> WebCore::HTMLScriptRunner::runScript(this=0x81e2a58, script=0x832c040, scriptStartPosition=...) (296)
                     ——> WebCore::ScriptElement::prepareScript (this=0x832c084, scriptStartPosition=...,     supportLegacyTypes=WebCore::ScriptElement::DisallowLegacyTypeInTypeAttribute) (Source/WebCore/dom/ScriptElement.cpp:240)
                     ——> WebCore::ScriptElement::executeScript (this=0x832c084, sourceCode=...) (283)
                     ——> WebCore::ScriptController::evaluate (this=0x828d1a4, sourceCode=...) (Source/WebCore/bindings/js/ScriptController.cpp:166)
                     ——> WebCore::ScriptController::evaluateInWorld (143)
                     ——> WebCore::JSMainThreadExecState::evaluate (Source/WebCore/bindings/js/JSMainThreadExecState.h:54)
                     ——> JSC::evaluate(exec=0xae3f499c, scopeChain=0xae3ee5c8, source=..., thisValue=...) (Source/JavaScriptCore/runtime/Completion.cpp:64)
                     ——> JSC::Interpreter::execute (Source/JavaScriptCore/interpreter/Interpreter.cpp:767)
                     ——> JSC::JITCode::execute (Source/JavaScriptCore/jit/JITCode.h:77)
                     ——> ?? ()
                     ——> WebCore::jsHTMLDocumentPrototypeFunctionWrite(WebCore/generated/JSHTMLDocument.cpp:445)
                     ——> WebCore::JSHTMLDocument::write (Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp:161)
                     ——> WebCore::documentWrite (156)
                     ——> WebCore::Document::write (Source/WebCore/dom/Document.cpp:2227)
                           ——> WebCore::HTMLDocumentParser::insert (Source/WebCore/html/parser/HTMLDocumentParser.cpp:324)
                              回到了html的解析
                           ——> WebCore::HTMLDocumentParser::pumpTokenizerIfPossible (175)
                           ——> WebCore::HTMLDocumentParser::pumpTokenizer  (299)
                                    查看是否有script,1、如果有,轉到“ 解析、執行script”;2、如果沒有轉到下面“”
                  完成解析html
                  InspectorInstrumentation::didWriteHTML(cookie, m_tokenizer->lineNumber());
                  ——> InspectorInstrumentation::didWriteHTML  (Source/WebCore/inspector/InspectorInstrumentation.h:803)
                  ——> 
            ——> Document::finishParsing() (Source/WebCore/dom/Document.cpp:2259)
                  ——>HTMLDocumentParser::finish()  (Source/WebCore/html/parser/HTMLDocumentParser.cpp:427)
                  ——>HTMLDocumentParser::attemptToEnd() (399)
                  ——> 
                  
 生成dom樹     
      


附件(js)下載、解析



      


二、下載
三、加載

參考文檔
1.官方文檔:http://www.webkit.org/blog/1188/how-webkit-loads-a-web-page/
2.dlmu2001的譯文:http://blog.csdn.net/dlmu2001/article/details/5941432
3.dlmu200:WebCore中的http請求信息維護 http://blog.csdn.net/dlmu2001/article/details/59361221
4.其他技術性文章:Introduction to WebKit Objective-C Programming Guide http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DisplayWebContent/DisplayWebContent.html
5.其他技術性文章:Introduction to WebKit DOM Programming Topics http://developer.apple.com/library/mac/#documentation/AppleApplications/Conceptual/SafariJSProgTopics/WebKitJavaScript.html
6. http://www.webkit.org/coding/technical-articles.html

相關技巧
1.cscope查找類的定義:cs find e class.*QString[^;]*($|{)

 

posted on 2013-08-22 14:25 citywanderer 閱讀(2587) 評論(0)  編輯 收藏 引用 所屬分類: webkit
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国际精品欧美精品| 久久婷婷国产综合精品青草 | 欧美一区二区三区视频| 亚洲一区日韩在线| 性欧美videos另类喷潮| 欧美一区二区精品在线| 久久久久久夜精品精品免费| 欧美在线免费观看视频| 久久久久国产精品一区二区| 久热re这里精品视频在线6| 久久亚洲精品一区二区| 鲁大师影院一区二区三区| 欧美激情一区在线| 一区二区三区日韩精品| 性欧美1819sex性高清| 久久国产加勒比精品无码| 久久久天天操| 欧美三级免费| 国产在线精品一区二区夜色| 亚洲精品视频一区| 校园激情久久| 国产精品三级久久久久久电影| 一区二区三区四区蜜桃| 欧美国产一区二区在线观看| 久久躁日日躁aaaaxxxx| 国产精品视频观看| 欧美一级在线亚洲天堂| 老鸭窝亚洲一区二区三区| 欧美日韩理论| 国精品一区二区三区| 亚洲乱码国产乱码精品精天堂 | 亚洲视频欧美视频| 亚洲欧美日韩国产成人| 亚洲第一综合天堂另类专| 国产精品私房写真福利视频| 亚洲国产日韩欧美在线99| 午夜精品美女自拍福到在线| 欧美成人免费全部观看天天性色| 亚洲最黄网站| 欧美1区免费| 国产一区二区成人| 亚洲免费视频在线观看| 亚洲国产精品va| 亚洲欧美日韩精品久久亚洲区| 欧美激情一区二区久久久| 国产一区二区久久| 午夜视频一区在线观看| 99在线视频精品| 免费观看久久久4p| 黄色在线成人| 久久久久成人精品免费播放动漫| 亚洲午夜av在线| 欧美午夜片在线观看| 亚洲免费观看在线观看| 亚洲第一页中文字幕| 久久精品视频在线免费观看| 国产三级精品在线不卡| 久久av一区| 亚洲影院污污.| 国产精自产拍久久久久久| 亚洲一区高清| 一本色道久久99精品综合| 欧美日韩一区综合| 亚洲一区二区三区在线| 9l视频自拍蝌蚪9l视频成人| 欧美色欧美亚洲另类七区| 中日韩美女免费视频网址在线观看 | 嫩草伊人久久精品少妇av杨幂| 亚洲自拍偷拍麻豆| 国产精品永久入口久久久| 亚洲欧美国产三级| 亚洲男人第一网站| 国产日韩欧美中文| 美女精品一区| 免费观看一级特黄欧美大片| 卡通动漫国产精品| 这里只有精品视频| 欧美激情麻豆| 一区二区三区视频在线看| 亚洲精品一区二区三| 欧美精品一区二区蜜臀亚洲| 一区二区不卡在线视频 午夜欧美不卡'| 亚洲国产精品黑人久久久| 欧美v日韩v国产v| 一个色综合av| 亚洲欧美视频一区二区三区| 国产在线观看一区| 亚洲电影免费观看高清| 欧美精彩视频一区二区三区| 亚洲一区欧美一区| 欧美在线视频观看| 亚洲大胆美女视频| 在线亚洲一区观看| 狠狠色综合日日| 亚洲国产日韩欧美一区二区三区| 欧美三级视频在线| 久久se精品一区精品二区| 在线一区欧美| 国产一区亚洲| 亚洲国产精品一区二区www在线| 亚洲综合欧美| 亚洲理论电影网| 午夜国产不卡在线观看视频| 欧美性猛交xxxx乱大交退制版| 香蕉久久夜色| 老司机一区二区| 欧美日韩国产精品专区| 亚洲欧美bt| 牛牛国产精品| 免费不卡视频| 亚洲精品乱码久久久久久黑人| 久久久久国产精品厨房| 欧美日韩一二三区| 欧美福利在线观看| 国产伦精品一区二区三区在线观看| 亚洲国产精品va在线看黑人| 国内久久婷婷综合| 亚洲一区二区三区免费视频 | 国产一区二区三区视频在线观看| 久久综合网hezyo| 国产精品素人视频| 亚洲裸体视频| 亚洲精品久久久久久一区二区 | 亚洲欧洲一区| 国产午夜精品一区二区三区视频| 亚洲精品网站在线播放gif| 亚洲国产精品99久久久久久久久| 亚洲午夜久久久久久久久电影网| 日韩天天综合| 欧美成人午夜剧场免费观看| 久热精品视频在线免费观看| 国产无一区二区| 午夜精品久久久久久99热| 亚洲尤物影院| 国产精品日日摸夜夜摸av| 亚洲精品乱码久久久久久蜜桃麻豆 | 久久久国产精品一区| 国产精品免费一区二区三区在线观看| 亚洲黄色免费网站| 在线精品视频一区二区三四| 欧美一区二区三区精品电影| 久久精品亚洲精品国产欧美kt∨| 国产精品免费一区二区三区在线观看 | 亚洲综合激情| 国产伦精品一区二区三区高清版| 亚洲一区高清| 久久成人精品视频| 狠狠色噜噜狠狠色综合久| 久久色在线播放| 欧美国产精品中文字幕| 亚洲福利一区| 欧美日本中文| 亚洲一区日韩| 快射av在线播放一区| 一区精品久久| 欧美日韩国产一区二区| 亚洲伊人色欲综合网| 久久久噜噜噜| 亚洲国产精品久久久久久女王| 欧美精品成人一区二区在线观看 | 亚洲一区在线免费观看| 久久国产欧美| 亚洲高清在线精品| 欧美日韩另类在线| 亚洲欧美亚洲| 免费久久99精品国产自在现线| 亚洲黄色在线看| 欧美亚男人的天堂| 久久国产精品99精品国产| 亚洲日韩视频| 久久久蜜桃一区二区人| 亚洲美女毛片| 国产一区二区三区自拍| 欧美激情久久久久| 欧美一区2区视频在线观看| 亚洲国产精品精华液网站| 久久精品国产免费观看| 欧美经典一区二区| 国产亚洲欧洲一区高清在线观看| 久久久精品欧美丰满| 亚洲欧洲日夜超级视频| 久久精品盗摄| av成人免费在线观看| 国产日韩欧美三区| 欧美日韩亚洲一区二区| 久久在线视频在线| 在线视频亚洲一区| 欧美激情中文字幕一区二区| 欧美专区亚洲专区| 99精品99久久久久久宅男| 国内精品免费午夜毛片| 欧美午夜www高清视频| 欧美刺激午夜性久久久久久久| 午夜亚洲激情| 亚洲视频在线观看| 亚洲日本在线观看| 免费永久网站黄欧美| 久久久久成人精品| 亚洲欧美日韩精品久久| 亚洲视频免费在线|