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

C++博客 聯系 聚合 管理  

Blog Stats

文章分類(17)

收藏夾(2)

文章檔案(18)

相冊

Blogs

citywanderer

StormWebkit:webkit的一個port,專用于linux字符模式下的運行。2012年由storm創建

參考qt
1、判定知否支持的port
541 # Force re-link of existing libraries if different than expected
542 removeLibraryDependingOnFeature("WebCore", "SVG", $svgSupport);
#返回 Unsupported platform, can't determine built library locations.

Tools/Scripts/webkitperl/features.pm:97
 94 sub removeLibraryDependingOnFeature($$$)
 
95 {
 
96     my ($libraryName, $featureName, $shouldHaveFeature= @_;
 
97     my $path = builtDylibPathForName($libraryName);

增加代碼:
Tools/Scripts/webkitdirs.pm
2047 #ginozhang 2012.2.11
2048 my $isStorm;
2049 sub isStorm()
2050 {   
2051     determineIsStorm();
2052     return $isStorm;
2053 }       
2054 sub determineIsStorm()
2055 {
2056     return if defined($isStorm);
2057        
2058     # Allow override in case QTDIR is not set.
2059     if (checkForArgumentAndRemoveFromARGV("--storm")) {
2060         $isStorm = 1;
2061         return;
2062     }
2063        
2064     # The presence of QTDIR only means Qt if --gtk or --wx or --efl are not on the command-line
2065     if (isQt() || isGtk() || isWx() || isEfl()) {
2066         $isStorm = 0;
2067         return;
2068     }  
2069        
2070     $isStorm = defined($ENV{'STORMDIR'});
2071 }

 597 sub builtDylibPathForName
 
598 {
 
599     my $libraryName = shift;
 
600     determineConfigurationProductDir();
 
601     if (isChromium()) {
 
602         return "$configurationProductDir/$libraryName";
 
603     }
 
604     #ginozhang
 605     if (isStorm()) { 
 
606         $libraryName = "StormWebKit";
 
607         return "$configurationProductDir/lib/lib$libraryName.so";
 
608     }
 
609     if (isQt()) {

2、
581     # For Gtk and Qt the WebKit project builds all others
582     # ginozhang
583     if ((isGtk() || isQt() || isStorm()) && $dir ne "Source/WebKit") {
584         chdirWebKit();
585         next;
586     }

3、buildQMakeStormProject,由 Source/DerivedSources.pro生成makefile 
594     } #ginozhang
595     elsif (isStorm()) {
596         #FIXME: $dir should probably be $project.
597         $result = buildQMakeStormProject($dir, $clean, @options);
598     } elsif (isAppleMacWebKit()) {

Tools/Scripts/webkitdirs.pm
buildQMakeStormProject()
3.1 增加WebKit/storm/Api/目錄
用途:用于生成WebKit/storm/Api/Makefile.DerivedSources文件
3.2 運行Source/DerivedSources.pro查看
Source/JavaScriptCore/DerivedSources.pro、WebCore/DerivedSources.proSource/WebKit/storm/Api/DerivedSources.pro是否存在,并生成對應的makefile
2136     push @dsQmakeArgs, "-o Makefile.DerivedSources";
2137     print "Calling '$qmakebin @dsQmakeArgs' in " . $dir . "\n\n";
#qmake -r OUTPUT_DIR=/root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/WebKitBuild/Debug -r /root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/Source/DerivedSources.pro -o Makefile.DerivedSources
2138     my $result = system "$qmakebin @dsQmakeArgs";
2139     if ($result ne 0) {
2140         die "Failed while running $qmakebin to generate derived sources!\n";
2141     }
增加Source/WebKit/storm/Api/目錄
增加、編輯Source/WebKit/storm/Api/DerivedSources.pro
如果不正確,會報錯。(tmp 先注視錯誤)
2163     for my $subdir (@subdirs) {
2164         my $dsMakefile = "Makefile.DerivedSources";
2165         print "Calling '$make $makeargs -C $subdir -f $dsMakefile generated_files' in " . $dir . "/$subdir\n\n";
2166         if ($make eq "nmake") {
2167             my $subdirWindows = $subdir;
2168             $subdirWindows =~ s:/:\\:g;
2169             $result = system "pushd $subdirWindows && $make $makeargs -f $dsMakefile generated_files && popd";
2170         } else {
2171             $result = system "$make $makeargs -C $subdir -f $dsMakefile generated_files";
2172         }
2173         if ($result ne 0) {
2174             #ginozhang
2175             #die "Failed to generate ${subdir}'s derived sources!\n";
2176         }
2177     }

需要增加Source/WebKit/storm/Api/下面的port實現文件?

3.3、運行Source/WebKit.pro
2199     push @buildArgs, sourceDir() . "/Source/WebKit.pro";
2200     print "Calling '$qmakebin @buildArgs' in " . $dir . "\n\n";
#qmake -r OUTPUT_DIR=/root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/WebKitBuild/Debug CONFIG-=release CONFIG+=debug /root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/Source/WebKit.pro
2201     print "Installation headers directory: $installHeaders\n" if(defined($installHeaders));
2202     print "Installation libraries directory: $installLibs\n" if(defined($installLibs));
2203 
2204     $result = system "$qmakebin @buildArgs";
將運行Source/JavaScriptCore/JavaScriptCore.proSource/JavaScriptCore/jsc.proSource/WebCore/WebCore.pro以及如下qt目錄下的pro
只是WebKit/qt目錄下
linux-pl6d:~/TestQtWebKit-2.2.0/QtWebKit-2.2.0 # egrep "\bqt\b" Source/WebKit.pro
SUBDIRS += WebKit/qt/QtWebKit.pro
    
exists($$PWD/WebKit2/UIProcess/API/qt/tests): SUBDIRS += WebKit2/UIProcess/API/qt/tests
    
exists($$PWD/WebKit/qt/declarative): SUBDIRS += WebKit/qt/declarative
exists($$PWD/WebKit/qt/tests): SUBDIRS += WebKit/qt/tests
        JavaScriptCore
/qt/api/QtScript.pro \
        JavaScriptCore
/qt/tests \
        JavaScriptCore
/qt/benchmarks
    
exists($$PWD/WebKit/qt/symbian/platformplugin): SUBDIRS += WebKit/qt/symbian/platformplugin
include(WebKit
/qt/docs/docs.pri)

3.4、運行Tools/Tools.pro
需要修改!
2221         print "Calling '$qmakebin @buildArgs -o $makefile' in " . $dir . "\n\n";
2222         $result = system "$qmakebin @buildArgs -o $makefile";
#qmake -r OUTPUT_DIR=/root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/WebKitBuild/Debug CONFIG-=release CONFIG+=debug /root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/Tools/Tools.pro -o Makefile.Tools
2223         if ($result ne 0) {
2224             die "Failed to setup build environment using $qmakebin!\n";
2225         }
講運行Tools/QtTestBrowser/QtTestBrowser.pro、Tools/DumpRenderTree/qt/DumpRenderTree.proTools/DumpRenderTree/qt/ImageDiff.proTools/DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro

3.5、運行Source/WebKit/storm/examples/examples.pro
需要修改!
2230         my $examplesDir = $dir . "/WebKit/storm/examples";
2231         File::Path::mkpath($examplesDir);
2232         $buildArgs[-1= sourceDir() . "/Source/WebKit/storm/examples/examples.pro";
2233         chdir $examplesDir or die;
2234         print "Calling '$qmakebin @buildArgs' in " . $examplesDir . "\n\n";
#qmake -r OUTPUT_DIR=/root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/WebKitBuild/Debug CONFIG-=release CONFIG+=debug /root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/Source/WebKit/storm/examples/examples.pro
2235         $result = system "$qmakebin @buildArgs";
2236         die "Failed to create makefiles for the examples!\n" if $result ne 0;
2237         chdir $dir or die;


、運行WebKitBuild/Debug/Makefile
 27 SUBTARGETS    =  \
 
28         sub-JavaScriptCore-JavaScriptCore-pro \
 
29         sub-JavaScriptCore-jsc-pro \
 
30         sub-WebCore \
 
31         sub-WebKit-storm-QtWebKit-pro
 
32 
storm的代碼
141 WebKit/storm/$(MAKEFILE).QtWebKit: 
142     @$(CHK_DIR_EXISTS) WebKit/storm/ || $(MKDIR) WebKit/storm/ 
143     cd WebKit/storm/ && $(QMAKE) /root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/Source/WebKit/storm/QtWebKit.pro OUTPUT_DIR=/root/     
    TestQtWebKit
-2.2.0/QtWebKit-2.2.0/WebKitBuild/Debug CONFIG-=release CONFIG+=debug -o $(MAKEFILE).QtWebKit
144 sub-WebKit-storm-QtWebKit-pro-qmake_all:  FORCE
145     @$(CHK_DIR_EXISTS) WebKit/storm/ || $(MKDIR) WebKit/storm/ 
146     cd WebKit/storm/ && $(QMAKE) /root/TestQtWebKit-2.2.0/QtWebKit-2.2.0/Source/WebKit/storm/QtWebKit.pro OUTPUT_DIR=/root/     
    TestQtWebKit
-2.2.0/QtWebKit-2.2.0/WebKitBuild/Debug CONFIG-=release CONFIG+=debug -o $(MAKEFILE).QtWebKit
147 sub-WebKit-storm-QtWebKit-pro: WebKit/storm/$(MAKEFILE).QtWebKit FORCE
148     cd WebKit/storm/ && $(MAKE) -f $(MAKEFILE).QtWebKit
storm的 Source/WebKit/storm/QtWebKit.pro(拷貝于qt)
生成空的header,cpp文件
egrep '\$\$PWD/(A|W)' QtWebKit.pro | perl -e 'while(my $line=<>){ print "$line";} '| awk -F'PWD/' '{print $2}' | awk '{print $1;}' | awk -F')' '{print $1}' | xargs touch

Source/WebCore/WebCore.pro關聯的qt中的文件全部替換成storm,并生成空的header,cpp文件

Source/JavaScriptCore/DerivedSources.pro
生成JavaScriptCoreWebCoreWebKit/storm/Api目錄下的Makefile.DerivedSources


類關系圖
Tools/QtTestBrowser/mainwindow.cpp

124 WebPage* MainWindow::page() const
125 {
126     return m_page;   
127 }
 38 MainWindow::MainWindow()
 39     : m_page(new WebPage(this))

Tools/QtTestBrowser/webpage.h
39 class WebPage : public QWebPage {

Source/WebKit/qt/Api/qwebpage.h
70 class QWEBKIT_EXPORT QWebPage : public QObject {
251     QWebFrame *mainFrame() const;



在原有的qt上修改(標志:ginozhang)
-1、./Tools/QtTestBrowser/main.cpp

#include <QtGui>
#include <stdio.h>
#include "qwebframe.h"
//#include "qwebpage.h"
#include "webpage.h"
//#include "webframe.h"
#include "utils.h"
#include "mainwindow.h"
#include "locationedit.h"

int
main ( int argc, char *argv[] )
{
    QUrl qurl = QUrl("http://127.0.0.1/index.html");
    //WebPage* m_page=new WebPage(this);
    QObject o;
    QWebPage* m_page=new QWebPage(&o);
    QWebFrame* mainFrame=m_page->mainFrame();
    mainFrame->load(qurl);
    //printf("url: %s\n", url.toString());
    return 0;
}


0、Source/JavaScriptCore/wtf/qt/MainThreadQt.cpp
wtf將會調用port接口(Source/JavaScriptCore/wtf/qt)

#0  0xb3a7d2a4 in QObject::thread() const () from /usr/lib/libQtCore.so.4
#1  0xb6bc0929 in WTF::isMainThread () at ../../../Source/JavaScriptCore/wtf/qt/MainThreadQt.cpp:72
//ginozhang
//return QThread::currentThread() == QCoreApplication::instance()->thread();

#2  0xb6bd168f in WTF::AtomicString::init () at ../../../Source/JavaScriptCore/wtf/text/StringStatics.cpp:77
#3  0xb65b3001 in WebCore::Settings::Settings (this=0x8113c70, page=0x81124d0) at ../../../Source/WebCore/page/Settings.cpp:190
#4  0xb659143c in WebCore::Page::Page (this=0x81124d0, pageClients=...) at ../../../Source/WebCore/page/Page.cpp:142
#5  0xb60485a3 in QWebPagePrivate::QWebPagePrivate (this=0x8110220, qq=0x810fda0)
    at ../../../../Source/WebKit/qt/Api/qwebpage.cpp:349
#6  0xb604dfcd in QWebPage::QWebPage (this=0x810fda0, parent=0xbffff3f8) at ../../../../Source/WebKit/qt/Api/qwebpage.cpp:1970
#7  0x0806e29b in main (argc=1, argv=0xbffff4c4) at ../../../Tools/QtTestBrowser/main.cpp:35

1、Source/WebCore/platform/qt/RenderThemeQt.cpp
平臺
QWidget: Must construct a QApplication before a QPaintDevice

#0  0xffffe424 in __kernel_vsyscall ()
#1  0xb35988df in raise () from /lib/libc.so.6
#2  0xb359a220 in abort () from /lib/libc.so.6
#3  0xb3965a2a in qt_message_output(QtMsgType, char const*) () from /usr/lib/libQtCore.so.4
#4  0xb3965c2f in ?? () from /usr/lib/libQtCore.so.4
#5  0xb3965d48 in qFatal(char const*, ...) () from /usr/lib/libQtCore.so.4
#6  0xb3d37f48 in QWidgetPrivate::QWidgetPrivate(int) () from /usr/lib/libQtGui.so.4
#7  0xb410307e in ?? () from /usr/lib/libQtGui.so.4
#8  0xb41a659c in QPushButton::QPushButton(QWidget*) () from /usr/lib/libQtGui.so.4
#9  0xb67fa67e in WebCore::RenderThemeQt::RenderThemeQt (this=0x8114118, page=0x81124d0)
    at ../../../Source/WebCore/platform/qt/RenderThemeQt.cpp:182
#10 0xb67fa4b7 in WebCore::RenderThemeQt::create (page=0x81124d0) at ../../../Source/WebCore/platform/qt/RenderThemeQt.cpp:165
#11 0xb67fa552 in WebCore::RenderTheme::themeForPage (page=0x81124d0) at ../../../Source/WebCore/platform/qt/RenderThemeQt.cpp:171
//PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page)
//{
    //ginozhang
//    return 0;
//-這樣會導致RenderTheme::defaultTheme()返回0,取成員函數時將返回段錯誤(Source/WebCore/css/CSSStyleSelector.cpp572     String defaultRules)

//修正方法:
//注釋RenderThemeQt::RenderThemeQt構造函數中的實現
//179 RenderThemeQt::RenderThemeQt(Page* page)

#12 0xb6591564 in WebCore::Page::Page (this=0x81124d0, pageClients=...) at ../../../Source/WebCore/page/Page.cpp:165
145     , m_theme(RenderTheme::themeForPage(this))
#13 0xb60485a3 in QWebPagePrivate::QWebPagePrivate (this=0x8110220, qq=0x810fda0)
    at ../../../../Source/WebKit/qt/Api/qwebpage.cpp:349
#14 0xb604dfcd in QWebPage::QWebPage (this=0x810fda0, parent=0xbffff3f8) at ../../../../Source/WebKit/qt/Api/qwebpage.cpp:1970
#15 0x0806e29b in main (argc=1, argv=0xbffff4c4) at ../../../Tools/QtTestBrowser/main.cpp:35

2、Source/WebCore/loader/MainResourceLoader.cpp
436     //ginozhang
437     //ASSERT(!m_response.isNull());

     Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
172 bool FrameLoaderClientQt::dumpFrameLoaderCallbacks = true;//false;//ginozhang

3、
linux-pl6d:~/QtWebKit-2.2.0/WebKitBuild/Debug/QtTestBrowser # ../bin/QtTestBrowser    
QObject::startTimer: QTimer can only be used with threads started with QThread
QObject::connect: Cannot connect (null)::aboutToQuit() to QWebPage::_q_cleanupLeakMessages()
WebCoreLoading : About to commit provisional load from previous URL '' to new URL ''
WebCoreHistory: Updating History for Standard Load in frame
WebCoreLoading : Finished committing provisional load to URL
UNIMPLEMENTED:
../../../Source/WebCore/html/parser/HTMLTreeBuilder.cpp(2669) : void WebCore::HTMLTreeBuilder::defaultForInitial()
UNIMPLEMENTED:
../../../Source/WebCore/html/parser/HTMLTreeBuilder.cpp(2609) : void WebCore::HTMLTreeBuilder::processEndOfFile(WebCore::AtomicHTMLToken&)
Progress started (0x8113f68) - frame 0x8129db0(""), value 0.000000, tracked frames 0, originating frame (nil)
HostInformation '127.0.0.1' loading 'http://127.0.0.1/index.html'. Current count 0
//253  Source/WebCore/loader/ResourceLoadScheduler.cpp
ResourceLoadScheduler::scheduleServePendingRequests, m_requestTimer.isActive()=0
UNIMPLEMENTED:
../../../../Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp(977) : virtual bool WebCore::FrameLoaderClientQt::shouldFallBack(const WebCore::ResourceError&)
Progress completed (0x8113f68) - frame 0x8129db0(""), value 0.100000, tracked frames 1, originating frame 0x8129db0
Final progress complete (0x8113f68)

4、build.sh

#!/bin/sh

<<COMMENT
@author: ginozhang
@date: 2012-01-06
@description:
COMMENT

#zypper in libqt4-devel gperf bison libicu-devel sqlite-devel libQtWebKit-devel
./Tools/Scripts/build-webkit --qt --no-video --debug > /root/build.log 2>&1 &
#./Tools/Scripts/build-webkit --qt --makeargs="-j20 -s" --no-video --debug > /root/build.log 2>&1 &

#main src:  ./Tools/QtTestBrowser/main.cpp
#build: WebKitBuild/Debug/QtTestBrowser
#run:  WebKitBuild/Debug/bin/QtTestBrowser

5、start
(./Tools/Scripts/run-launcher --qt --debug > ./log_start.log 2>&1)
cd WebKitBuild/Debug/QtTestBrowser;
 ../bin/QtTestBrowser

6、添加curl
curl-7.20.0.tar.gz
make;make install;
#undefined reference to `clock_gettime'
#vim src/Makefile
#419     $(LINK) $(curl_LDFLAGS) $(curl_OBJECTS) $(curl_LDADD) $(LIBS) -lrt
示例程序:docs/examples/getinmemory.c
gcc -o simple gethtml.c -lcurl

Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
 45 #include <stdio.h>
 46 #include <stdlib.h>
 47 #include <string.h>
 48
 49 #include <curl/curl.h>
 50 #include <curl/types.h>
 51 #include <curl/easy.h>
//添加 libcurl:cd /usr/lib/;ln -s -T /usr/local/lib/libcurl.so libcurl.so
//vim ./Source/WebCore/WebCore.pri
//186             LIBS += -lsqlite3 -lcurl

753 //ginozhang download html use libcurl
754 //代替 start,forwardData函數
755 void QNetworkReplyHandler::start()
756 {  
757     const QUrl url = m_request.url();
758     struct MemoryStruct chunk;
759     QString strUrl=url.toString();
760     const char* purl=strUrl.toAscii();
761     download(purl, chunk);
762
763     QByteArray data =  chunk.memory;
764
765     ResourceHandleClient* client = m_resourceHandle->client();
766     if (!client)
767         return;            
768    
769     // FIXME: https://bugs.webkit.org/show_bug.cgi?id=19793
770     // -1 means we do not provide any data about transfer size to inspector so it would use
771     // Content-Length headers or content size to show transfer size.
772     if (!data.isEmpty()) {  
773         client->didReceiveData(m_resourceHandle, data.constData(), data.length(), -1);
               client->didFinishLoading(m_resourceHandle, 0);
          }
774 }  
671 struct MemoryStruct {
672     char *memory;
673     size_t size;
674 }
;
675 //static void *myrealloc(void *ptr, size_t size);
676 
677 static void *myrealloc(void *ptr, size_t size)
678 //void *QNetworkReplyHandler::myrealloc(void *ptr, size_t size)
679 {
680   /* There might be a realloc() out there that doesn't like reallocing
681      NULL pointers, so we take care of it here 
*/

682   if(ptr)
683     return realloc(ptr, size);
684   else
685     return malloc(size);
686 }

687 
688 static size_t WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data)
689 //size_t QNetworkReplyHandler::WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data)
690 {
691   size_t realsize = size * nmemb;
692   struct MemoryStruct *mem = (struct MemoryStruct *)data;
693 
694   mem->memory = (char*)myrealloc(mem->memory, mem->size + realsize + 1);
695   if (mem->memory) {
696     memcpy(&(mem->memory[mem->size]), ptr, realsize);
697     mem->size += realsize;
698     mem->memory[mem->size] = 0;
699   }

700   return realsize;
701 }

858 void QNetworkReplyHandler::start()
859 {
860     const KURL url = m_request.url();
861     struct MemoryStruct chunk;
862     //QString strUrl=url.toString();
863     const char* purl=url.string().latin1().data();
864     //const char* purl1=strUrl.toAscii();
865     //QString qString2 = QString::fromUtf8(purl1);
866 
867     //const char* purl = qString2.toAscii();
868 
869     printf("purl: -%s- url: %s\n", purl, url.string().latin1().data());
870     CURL *curl_handle;
871     CURLcode res;
872     //struct data config;
873 
874     //config.trace_ascii = 1; /* enable ascii tracing */
875 
876     //struct MemoryStruct chunk;
877 
878     chunk.memory=NULL; /* we expect realloc(NULL, size) to work */
879     chunk.size = 0;    /* no data at this point */
880 
881     curl_global_init(CURL_GLOBAL_ALL);
882 
883     /* init the curl session */
884     curl_handle = curl_easy_init();
885 
886     //curl_easy_setopt(curl_handle, CURLOPT_DEBUGFUNCTION, my_trace);
887     //curl_easy_setopt(curl_handle, CURLOPT_DEBUGDATA, &config);
888     /* specify URL to get */
889     printf("url: -%s-\n", url.string().latin1().data());
890     curl_easy_setopt(curl_handle, CURLOPT_URL, url.string().latin1().data());
891     //curl_easy_setopt(curl_handle, CURLOPT_URL, "http://127.0.0.1/test19.html");
892 
893     /* send all data to this function  */
894     curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
895 
896     /* we pass our 'chunk' struct to the callback function */
897     curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
898 
899     /* some servers don't like requests that are made without a user-agent
900        field, so we provide one 
*/

901     curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
902 
903     /* get it! */
904     res = curl_easy_perform(curl_handle);
905     printf("res: %d %s\n", res,chunk.memory?chunk.memory:"no");
906 
907     char *ct;
908     res = curl_easy_getinfo(curl_handle, CURLINFO_CONTENT_TYPE, &ct);
909     printf("res: %d contenttype: %s\n", res,ct);
910     WTF::String mimeType(ct);
911 
912     long long filesize;
913     res = curl_easy_getinfo(curl_handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &filesize);
914     printf("res: %d filesize: %llu\n", res,filesize);
915 
916 
917     /* cleanup curl stuff */
918     curl_easy_cleanup(curl_handle);
934     /* we're done with libcurl, so clean it up */
935     curl_global_cleanup();
936     //download(purl, chunk);
937 
938     QByteArray data =  chunk.memory;
939 
940     ResourceHandleClient* client = m_resourceHandle->client();
941     if (!client)
942         return;
947     if (!data.isEmpty())
948     {
957         ResourceResponse response(url, mimeType.lower()
958                 , filesize
959                 ,String()
960                 , String());
961         client->didReceiveResponse(m_resourceHandle, response);
962         client->didReceiveData(m_resourceHandle, data.constData(), data.length(), -1);
963         //Èç¹ûÔÚËùÓÐÒ³Ãæ¶¼ÏÂÔØ½áÊøºóÖ´ÐÐÏÂÁÐÓï¾ä£¿£¿
964         client->didFinishLoading(m_resourceHandle, 0);
965     }

966 }


Source/WebCore/loader/cache/CachedResourceRequest.cpp
151     //ASSERT(loader == m_loader.get());//ginozhang
Source/WebCore/loader/cache/CachedResourceLoader.cpp
611     --m_requestCount;if(m_requestCount<0){m_requestCount=0;}//ginozhang 2012.6.10

7、去除layout
Source/WebCore/page/FrameView.cpp  790
 787 void FrameView::layout(bool allowSubtree)
 
788 {
 
789     //ginozhang
 790     return;

8、
Source/WebCore/platform/qt/PlatformScreenQt.cpp

9、Source/WebCore/platform/qt/RenderThemeQt.cpp

技巧:
一、gdb使用python腳本打印qtwekit中對象的方法
1、打印qtwebkit的python腳本
例如:QtWebKit-2.2.0/Tools/gdb/webkit.py
2、gdb啟動時加載python腳本
~/.gdbinit
python
import sys
import os
#python腳本目錄
sys.path.insert(0, os.getenv('HOME') + '/QtWebKit-2.2.0/Tools/gdb/')
import webkit
3、清除其它port代碼
for dir in chromium efl gtk haiku mac win wince wx;do find . -name "$dir" | xargs rm -fr ;done
find . -name '*.o' | xargs rm
find . -name '*.a' | xargs rm

posted on 2013-08-22 14:25 citywanderer 閱讀(385) 評論(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>
            欧美国产免费| 一区二区三区精密机械公司 | 亚洲国产一区在线观看| 欧美一区日本一区韩国一区| 国产欧美二区| 久久精品天堂| 牛牛影视久久网| 99re6这里只有精品| 99视频精品| 国产亚洲精品美女| 亚洲电影网站| 国产精品久久久久国产a级| 久久精品国语| 欧美激情第9页| 欧美在线免费视频| 久久亚洲私人国产精品va| 99视频有精品| 午夜精品在线| 一区二区高清在线观看| 国产亚洲午夜| 亚洲人成网站精品片在线观看| 国产精品二区在线观看| 麻豆精品国产91久久久久久| 欧美精品1区2区| 久久国产精品电影| 欧美激情一区二区三区四区| 欧美一区二区在线播放| 久久亚洲国产成人| 一区二区三区精密机械公司| 久久精品国产久精国产思思| 日韩一区二区精品视频| 久久精品一区二区三区四区| 亚洲一区二区三区视频播放| 久久琪琪电影院| 欧美中文字幕在线视频| 欧美福利一区二区| 久久麻豆一区二区| 国产精品美女久久久浪潮软件| 亚洲电影视频在线| 精品盗摄一区二区三区| 亚洲一区二区欧美日韩| 亚洲人在线视频| 久久精品综合网| 久久se精品一区二区| 欧美日韩亚洲另类| 亚洲成人在线视频播放 | 欧美精品综合| 免费观看成人www动漫视频| 国产精品高潮呻吟久久av黑人| 亚洲国产精品久久91精品| 国内久久视频| 亚洲欧美一区二区原创| 亚洲欧美日本伦理| 欧美日韩一区二区三区免费看 | 欧美激情91| 136国产福利精品导航网址| 午夜老司机精品| 亚洲欧美精品在线| 欧美日韩免费观看一区二区三区 | 久久青草福利网站| 国产视频亚洲精品| 亚洲中字黄色| 欧美在线一区二区三区| 国产精品丝袜久久久久久app| 日韩一二三在线视频播| 一本综合久久| 欧美三级午夜理伦三级中文幕| 亚洲激情中文1区| 99国产一区| 国产精品99一区二区| 99视频一区| 欧美一级片一区| 国产情侣一区| 久久精品一本| 欧美多人爱爱视频网站| 亚洲精品资源| 欧美日韩免费一区| 亚洲综合成人在线| 久久婷婷久久| 亚洲欧洲日产国产综合网| 欧美巨乳波霸| 亚洲一区二区精品在线| 久久精品一区二区三区不卡牛牛 | 欧美日本亚洲韩国国产| 亚洲精品在线观看免费| 午夜在线成人av| 国产亚洲精品资源在线26u| 久久婷婷成人综合色| 亚洲激情社区| 午夜激情综合网| 韩国一区二区在线观看| 免费成人黄色| 亚洲一区二区欧美日韩| 美女日韩在线中文字幕| 亚洲精品在线视频观看| 国产精品久在线观看| 久久精品日产第一区二区三区| 亚洲国产精品成人久久综合一区| 亚洲少妇最新在线视频| 国产香蕉久久精品综合网| 蜜臀久久99精品久久久画质超高清| 亚洲精品免费在线| 久久国产一区| 一本色道久久88综合亚洲精品ⅰ| 国产欧美91| 欧美日韩国产一区| 久久精品国产久精国产爱| 亚洲精品一区二区三区樱花| 久久精品一区二区三区四区| 一区二区欧美国产| 精品动漫一区二区| 国产精品你懂得| 欧美日韩国产bt| 久久久久国产一区二区三区| 亚洲午夜未删减在线观看| 久久香蕉国产线看观看av| 在线视频日韩精品| 亚洲日本无吗高清不卡| 国产一区二区三区高清在线观看| 欧美日本高清一区| 你懂的亚洲视频| 久久九九热re6这里有精品| 一本一道久久综合狠狠老精东影业 | 欧美激情亚洲| 久久综合伊人77777| 午夜精品久久久久久久99热浪潮| 亚洲日韩欧美视频| 在线精品视频在线观看高清| 国产啪精品视频| 国产精品久久久久久五月尺| 欧美日本国产在线| 欧美激情第8页| 女人香蕉久久**毛片精品| 久久久久国产免费免费| 久久精品日产第一区二区| 欧美亚洲免费在线| 亚洲欧美日韩国产成人精品影院 | 亚洲伦理久久| 亚洲精品国产精品乱码不99| 亚洲国产成人不卡| 亚洲国产成人一区| 欧美激情一区二区三级高清视频| 男人天堂欧美日韩| 欧美国产国产综合| 亚洲国产精品t66y| 亚洲剧情一区二区| 99re6这里只有精品视频在线观看| 亚洲精品偷拍| 亚洲天堂成人在线视频| 亚洲一品av免费观看| 亚洲网友自拍| 欧美中文字幕久久| 久久久久成人精品| 免费在线看成人av| 欧美国产精品va在线观看| 欧美经典一区二区三区| 欧美日韩人人澡狠狠躁视频| 国产精品wwwwww| 国产日韩欧美在线视频观看| 狠狠入ady亚洲精品经典电影| 亚洲国产黄色片| 日韩一级欧洲| 午夜精品视频在线| 久久久午夜精品| 欧美韩日高清| 亚洲视频一区二区| 久久精品人人做人人综合| 欧美成人一区二区| 欧美日一区二区三区在线观看国产免| 国产精品区一区| 一区久久精品| 一区二区三区高清视频在线观看| 亚洲欧洲av一区二区| 麻豆久久婷婷| a4yy欧美一区二区三区| 久久精品一区二区| 欧美日韩另类在线| 一区二区三区在线视频播放| 一本大道久久精品懂色aⅴ| 羞羞答答国产精品www一本| 免费不卡欧美自拍视频| 中文国产一区| 另类亚洲自拍| 国产伦精品一区二区三区视频孕妇 | 欧美不卡视频| 国产日韩精品在线播放| 日韩视频免费大全中文字幕| 久久精品亚洲乱码伦伦中文 | 亚洲乱码国产乱码精品精可以看 | 亚洲精品久久嫩草网站秘色 | 亚洲欧洲一级| 欧美一区二视频| 欧美另类综合| 亚洲第一福利社区| 欧美一区二区三区在线观看| 亚洲精品美女在线观看| 老鸭窝毛片一区二区三区| 国产一区二区三区黄| 亚洲一品av免费观看| 亚洲人www|