165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/* 265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved. 365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without 565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions 665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met: 765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright 865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer. 965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer in the 1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * documentation and/or other materials provided with the distribution. 1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE. 2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */ 2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "config.h" 2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebInspectorProxy.h" 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(INSPECTOR) 3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "WebKitBundle.h" 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPageProxy.h" 332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "WebProcessProxy.h" 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebView.h" 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/WebCoreInstanceHandle.h> 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/PassRefPtr.h> 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/RetainPtr.h> 3881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <wtf/text/StringConcatenate.h> 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/text/WTFString.h> 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore; 4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic const LPCWSTR kWebKit2InspectorWindowClassName = L"WebKit2InspectorWindowClass"; 4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebInspectorProxy::registerInspectorViewWindowClass() 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static bool haveRegisteredWindowClass = false; 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (haveRegisteredWindowClass) 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return true; 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch haveRegisteredWindowClass = true; 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WNDCLASSEX wcex; 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch wcex.cbSize = sizeof(WNDCLASSEX); 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch wcex.style = CS_DBLCLKS; 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch wcex.lpfnWndProc = WebInspectorProxy::InspectorViewWndProc; 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch wcex.cbClsExtra = 0; 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch wcex.cbWndExtra = sizeof(WebInspectorProxy*); 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch wcex.hInstance = instanceHandle(); 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch wcex.hIcon = 0; 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch wcex.hCursor = ::LoadCursor(0, IDC_ARROW); 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch wcex.hbrBackground = 0; 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch wcex.lpszMenuName = 0; 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch wcex.lpszClassName = kWebKit2InspectorWindowClassName; 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch wcex.hIconSm = 0; 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return !!::RegisterClassEx(&wcex); 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochLRESULT CALLBACK WebInspectorProxy::InspectorViewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LONG_PTR longPtr = ::GetWindowLongPtr(hWnd, 0); 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (WebInspectorProxy* inspectorView = reinterpret_cast<WebInspectorProxy*>(longPtr)) 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return inspectorView->wndProc(hWnd, message, wParam, lParam); 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (message == WM_CREATE) { 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LPCREATESTRUCT createStruct = reinterpret_cast<LPCREATESTRUCT>(lParam); 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Associate the WebInspectorProxy with the window. 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ::SetWindowLongPtr(hWnd, 0, (LONG_PTR)createStruct->lpCreateParams); 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return ::DefWindowProc(hWnd, message, wParam, lParam); 8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochLRESULT WebInspectorProxy::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch LRESULT lResult = 0; 9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool handled = true; 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch switch (message) { 9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case WM_SIZE: 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch lResult = onSizeEvent(hWnd, message, wParam, lParam, handled); 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case WM_GETMINMAXINFO: 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch lResult = onMinMaxInfoEvent(hWnd, message, wParam, lParam, handled); 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case WM_SETFOCUS: 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch lResult = onSetFocusEvent(hWnd, message, wParam, lParam, handled); 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch case WM_CLOSE: 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch lResult = onCloseEvent(hWnd, message, wParam, lParam, handled); 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch default: 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch handled = false; 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!handled) 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch lResult = ::DefWindowProc(hWnd, message, wParam, lParam); 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return lResult; 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochLRESULT WebInspectorProxy::onSizeEvent(HWND, UINT, WPARAM, LPARAM, bool&) 12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RECT rect; 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ::GetClientRect(m_inspectorWindow, &rect); 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ::SetWindowPos(m_inspectorView->window(), 0, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER); 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochLRESULT WebInspectorProxy::onSetFocusEvent(HWND, UINT, WPARAM, LPARAM lParam, bool&) 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ::SetFocus(m_inspectorView->window()); 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochLRESULT WebInspectorProxy::onMinMaxInfoEvent(HWND, UINT, WPARAM, LPARAM lParam, bool&) 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch MINMAXINFO* info = reinterpret_cast<MINMAXINFO*>(lParam); 13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch POINT size = {minimumWindowWidth, minimumWindowHeight}; 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch info->ptMinTrackSize = size; 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochLRESULT WebInspectorProxy::onCloseEvent(HWND, UINT, WPARAM, LPARAM, bool&) 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ::ShowWindow(m_inspectorWindow, SW_HIDE); 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch close(); 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebPageProxy* WebInspectorProxy::platformCreateInspectorPage() 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_inspectorView); 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_inspectorWindow); 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RECT emptyRect = { 0 }; 1592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_inspectorView = WebView::create(emptyRect, m_page->process()->context(), inspectorPageGroup(), 0); 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_inspectorView->page(); 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebInspectorProxy::platformOpen() 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch registerInspectorViewWindowClass(); 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_inspectorWindow = ::CreateWindowEx(0, kWebKit2InspectorWindowClassName, 0, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 0, 0, initialWindowWidth, initialWindowHeight, 0, 0, instanceHandle(), this); 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(::IsWindow(m_inspectorWindow)); 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_inspectorView->setParentWindow(m_inspectorWindow); 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ::ShowWindow(m_inspectorWindow, SW_SHOW); 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebInspectorProxy::platformClose() 17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 1782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ASSERT(!m_isVisible || m_inspectorWindow); 1792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ASSERT(!m_isVisible || m_inspectorView); 18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (m_inspectorWindow) { 1822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ASSERT(::IsWindow(m_inspectorWindow)); 1832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ::DestroyWindow(m_inspectorWindow); 1842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_inspectorWindow = 0; 18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_inspectorView = 0; 18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebInspectorProxy::platformInspectedURLChanged(const String& urlString) 19181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 19281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // FIXME: this should be made localizable once WebKit2 supports it. <rdar://problem/8728860> 19381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch String title = makeString("Web Inspector ", static_cast<UChar>(0x2014), ' ', urlString); 19481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ::SetWindowTextW(m_inspectorWindow, title.charactersWithNullTermination()); 19581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 19681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochString WebInspectorProxy::inspectorPageURL() const 19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 19981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch RetainPtr<CFURLRef> htmlURLRef(AdoptCF, CFBundleCopyResourceURL(webKitBundle(), CFSTR("inspector"), CFSTR("html"), CFSTR("inspector"))); 20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!htmlURLRef) 20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return String(); 20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return String(CFURLGetString(htmlURLRef.get())); 20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // ENABLE(INSPECTOR) 209