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

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>
            久久久成人网| 欧美在线黄色| 久久在线播放| 99在线精品视频在线观看| 亚洲国产小视频| 欧美人与性动交a欧美精品| 亚洲欧美国产三级| 免费久久99精品国产自| 亚洲一区二区三区影院| 美女久久一区| 久久久女女女女999久久| 欧美午夜不卡| 亚洲欧洲一区| 亚洲国产99| 午夜精品久久久| 亚洲一区二区在线免费观看| 久久国产主播| 美女任你摸久久| 国产婷婷色一区二区三区四区| 日韩午夜在线| 一本大道久久a久久精二百| 久久亚洲春色中文字幕| 久久久99精品免费观看不卡| 国产精品欧美激情| 中文国产亚洲喷潮| 欧美视频在线观看| 欧美不卡一区| 欧美精品一区二区久久婷婷| 蜜臀久久99精品久久久画质超高清| 欧美日韩久久不卡| 亚洲精品国产欧美| 欧美国产精品v| 久久久国产亚洲精品| 国内精品嫩模av私拍在线观看 | 国产曰批免费观看久久久| 中日韩午夜理伦电影免费| 亚洲狼人精品一区二区三区| 欧美精品日韩一本| 99亚洲视频| 香蕉久久久久久久av网站| 国产色视频一区| 久久久青草青青国产亚洲免观| 久久精品一区| 亚洲一区免费看| 久久精品国产亚洲一区二区| 99天天综合性| 另类激情亚洲| 欧美综合第一页| 欧美日韩精品免费观看| 久久精品视频网| 国产精品qvod| 欧美高清视频在线观看| 国产欧美一区二区三区另类精品| 欧美国产三区| 激情欧美一区二区三区| 夜夜嗨av色一区二区不卡| 91久久精品一区二区别| 亚洲风情在线资源站| 亚洲精选一区| 亚洲春色另类小说| 国产视频一区免费看| 亚洲视频第一页| 亚洲最新在线视频| 欧美xart系列高清| 欧美激情亚洲精品| 亚洲人成艺术| 欧美日韩精品免费| 一区二区欧美日韩| 亚洲一区二区三区在线观看视频| 欧美a级一区| 亚洲精选成人| 亚洲性线免费观看视频成熟| 欧美日韩亚洲一区二区三区四区 | 亚洲精品自在在线观看| 亚洲成色777777女色窝| 欧美成人资源网| 亚洲激情第一页| 亚洲一二三区在线| 国产精品每日更新| 久久久97精品| 亚洲精品一区二区三区婷婷月| 在线视频精品一| 国产精品一区二区久久久| 欧美尤物巨大精品爽| 欧美不卡福利| 久久精品亚洲精品| 中文成人激情娱乐网| 免费精品视频| 中国成人黄色视屏| 免费不卡视频| 欧美午夜精品久久久久久浪潮| 久久亚洲捆绑美女| 久久综合亚州| 一区二区三区在线观看国产| 国产精品亚洲第一区在线暖暖韩国| 欧美91精品| 狼人社综合社区| 免费日韩av电影| 亚洲欧美一区二区三区久久| 日韩午夜在线| 最新亚洲激情| 亚洲经典三级| 99国产精品久久久久久久成人热| 红桃视频成人| 狠狠色丁香婷综合久久| 国产综合网站| 国产在线拍偷自揄拍精品| 国产精品老牛| 欧美色大人视频| 国产精品女同互慰在线看| 国产日韩欧美制服另类| 欧美国产三区| 男女精品网站| 久久久久久夜| 欧美揉bbbbb揉bbbbb| 国产精品激情偷乱一区二区∴| 国产欧美一区二区三区另类精品| 一色屋精品亚洲香蕉网站| 在线免费观看成人网| 亚洲国产日韩一区| 亚洲色图自拍| 久久先锋影音av| 亚洲精品在线免费观看视频| 亚洲欧美区自拍先锋| 久久这里只精品最新地址| 欧美午夜精品理论片a级按摩| 精品av久久707| 欧美在线你懂的| 欧美国产先锋| 一本色道久久88综合日韩精品| 亚洲精品日产精品乱码不卡| 久久综合一区二区| 欧美精品一区二区久久婷婷| 亚洲欧美日韩综合| 欧美aⅴ99久久黑人专区| 欧美在线一区二区三区| 欧美激情影院| 亚洲人体1000| 亚洲精品日韩欧美| 老巨人导航500精品| 麻豆精品在线视频| 国产精品欧美一区二区三区奶水 | 欧美日韩成人网| 亚洲国产免费| 一区二区欧美精品| 久久免费国产精品1| 国产精品久久激情| 亚洲特级片在线| 一区二区三区四区五区精品视频| 美女精品自拍一二三四| 亚洲电影免费| 欧美华人在线视频| 欧美精品三级| 亚洲免费一在线| 亚洲天堂免费在线观看视频| 欧美午夜精品一区| 久久www成人_看片免费不卡| 欧美在线视频免费观看| 一色屋精品视频在线观看网站| 麻豆免费精品视频| 欧美大片免费观看| 亚洲综合欧美日韩| 欧美专区一区二区三区| 亚洲激情在线观看视频免费| 亚洲福利国产| 欧美性理论片在线观看片免费| 性久久久久久久| 美女视频一区免费观看| 一区二区高清在线| 久久免费国产精品| 一区二区三区日韩欧美| 欧美一区影院| 在线一区亚洲| 欧美国产欧美综合| 亚洲免费av片| 国产精品有限公司| 久久久噜噜噜久久人人看| 亚洲国产影院| 久久精品人人做人人爽| 亚洲人成网站影音先锋播放| 国产精品mm| 欧美精品一卡| 久久精品国产免费| 免费成人小视频| 永久免费视频成人| 久久爱另类一区二区小说| 欧美一区二区性| 国产精品久久久久免费a∨| 一区二区三区高清在线| av成人免费在线| 国产精品sm| 亚洲欧洲99久久| 久久精品噜噜噜成人av农村| 国产精品永久入口久久久| 一区二区欧美精品| 久久精品人人做人人爽电影蜜月| 国产亚洲成av人在线观看导航 | 久久久青草婷婷精品综合日韩| 国产精品国产三级国产专区53| 亚洲神马久久|