⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webkitdll.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
字号:
/* * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  */#include "config.h"#include "WebKitDLL.h"#include "ForEachCoClass.h"#include "resource.h"#include "WebKit.h"#include "WebKitClassFactory.h"#include "WebScriptDebugServer.h"#include <WebCore/COMPtr.h>#include <WebCore/IconDatabase.h>#include <WebCore/LocalStorage.h>#include <WebCore/Page.h>#include <WebCore/PageGroup.h>#include <WebCore/RenderThemeWin.h>#include <WebCore/SharedBuffer.h>#include <WebCore/Widget.h>#include <wtf/Vector.h>#include <tchar.h>#include <olectl.h>using namespace WebCore;ULONG gLockCount;ULONG gClassCount;HashCountedSet<String> gClassNameCount;HINSTANCE gInstance;#define CLSID_FOR_CLASS(cls) CLSID_##cls,CLSID gRegCLSIDs[] = {    FOR_EACH_COCLASS(CLSID_FOR_CLASS)};#undef CLSID_FOR_CLASSSTDAPI_(BOOL) DllMain( HMODULE hModule, DWORD  ul_reason_for_call, LPVOID /*lpReserved*/){    switch (ul_reason_for_call) {        case DLL_PROCESS_ATTACH:            gLockCount = gClassCount = 0;            gInstance = hModule;            WebCore::Page::setInstanceHandle(hModule);            return TRUE;        case DLL_PROCESS_DETACH:            WebCore::RenderThemeWin::setWebKitIsBeingUnloaded();            break;        case DLL_THREAD_ATTACH:        case DLL_THREAD_DETACH:            break;    }    return FALSE;}STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv){    bool found = false;    for (int i = 0; i < ARRAYSIZE(gRegCLSIDs); i++) {        if (IsEqualGUID(rclsid, gRegCLSIDs[i])) {            found = true;            break;        }    }    if (!found)        return E_FAIL;    if (!IsEqualGUID(riid, IID_IUnknown) && !IsEqualGUID(riid, IID_IClassFactory))        return E_NOINTERFACE;    WebKitClassFactory* factory = new WebKitClassFactory(rclsid);    *ppv = reinterpret_cast<LPVOID>(factory);    if (!factory)        return E_OUTOFMEMORY;    factory->AddRef();    return S_OK;}STDAPI DllCanUnloadNow(void){    if (!gClassCount && !gLockCount)        return S_OK;        return S_FALSE;}// deprecated - do not useSTDAPI DllUnregisterServer(void){    return 0;}// deprecated - do not useSTDAPI DllRegisterServer(void){    return 0;}// deprecated - do not useSTDAPI RunAsLocalServer(){    return 0;}// deprecated - do not useSTDAPI LocalServerDidDie(){    return 0;}void shutDownWebKit(){    WebCore::iconDatabase()->close();    WebCore::PageGroup::closeLocalStorage();}//FIXME: We should consider moving this to a new file for cross-project functionalityPassRefPtr<WebCore::SharedBuffer> loadResourceIntoBuffer(const char* name){    int idr;    // temporary hack to get resource id    if (!strcmp(name, "textAreaResizeCorner"))        idr = IDR_RESIZE_CORNER;    else if (!strcmp(name, "missingImage"))        idr = IDR_MISSING_IMAGE;    else if (!strcmp(name, "nullPlugin"))        idr = IDR_NULL_PLUGIN;    else if (!strcmp(name, "panIcon"))        idr = IDR_PAN_SCROLL_ICON;    else if (!strcmp(name, "panSouthCursor"))        idr = IDR_PAN_SOUTH_CURSOR;    else if (!strcmp(name, "panNorthCursor"))        idr = IDR_PAN_NORTH_CURSOR;    else if (!strcmp(name, "panEastCursor"))        idr = IDR_PAN_EAST_CURSOR;    else if (!strcmp(name, "panWestCursor"))        idr = IDR_PAN_WEST_CURSOR;    else if (!strcmp(name, "panSouthEastCursor"))        idr = IDR_PAN_SOUTH_EAST_CURSOR;    else if (!strcmp(name, "panSouthWestCursor"))        idr = IDR_PAN_SOUTH_WEST_CURSOR;    else if (!strcmp(name, "panNorthEastCursor"))        idr = IDR_PAN_NORTH_EAST_CURSOR;    else if (!strcmp(name, "panNorthWestCursor"))        idr = IDR_PAN_NORTH_WEST_CURSOR;    else if (!strcmp(name, "searchMagnifier"))        idr = IDR_SEARCH_MAGNIFIER;    else if (!strcmp(name, "searchMagnifierResults"))        idr = IDR_SEARCH_MAGNIFIER_RESULTS;    else if (!strcmp(name, "searchCancel"))        idr = IDR_SEARCH_CANCEL;    else if (!strcmp(name, "searchCancelPressed"))        idr = IDR_SEARCH_CANCEL_PRESSED;    else if (!strcmp(name, "zoomInCursor"))        idr = IDR_ZOOM_IN_CURSOR;    else if (!strcmp(name, "zoomOutCursor"))        idr = IDR_ZOOM_OUT_CURSOR;    else if (!strcmp(name, "verticalTextCursor"))        idr = IDR_VERTICAL_TEXT_CURSOR;    else        return 0;    HRSRC resInfo = FindResource(gInstance, MAKEINTRESOURCE(idr), L"PNG");    if (!resInfo)        return 0;    HANDLE res = LoadResource(gInstance, resInfo);    if (!res)        return 0;    void* resource = LockResource(res);    if (!resource)        return 0;    int size = SizeofResource(gInstance, resInfo);    return WebCore::SharedBuffer::create(reinterpret_cast<const char*>(resource), size);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -