Commit 67a46dba authored by bweinstein@apple.com's avatar bweinstein@apple.com

Web Inspector: Make inspector on Windows show and be usable in WebKit2

https://bugs.webkit.org/show_bug.cgi?id=50877
        
Reviewed by Sam Weinig.

Hook up the unimplemented methods in WebInspectorProxyWin to get the web inspector
showing and usable in WebKit2 on Windows.

* UIProcess/WebInspectorProxy.cpp:
(WebKit::WebInspectorProxy::WebInspectorProxy): Initialize Windows-specific variables to 0.
* UIProcess/WebInspectorProxy.h:
* UIProcess/win/WebInspectorProxyWin.cpp:
(WebKit::WebInspectorProxy::registerInspectorViewWindowClass): Sets up the inspector view class.
(WebKit::WebInspectorProxy::InspectorViewWndProc): Calls through to the WebInspectorProxy's non-static
    WndProc.
(WebKit::WebInspectorProxy::wndProc): Handles WM_SIZE, WM_CLOSE, and WM_GETMINMAXINFO, the rest go to 
    ::DefWindowProc.
(WebKit::WebInspectorProxy::onSizeEvent): Resize the WKView that has the inspector page to match the
    outer window that was just resized.
(WebKit::WebInspectorProxy::onMinMaxInfoEvent): Set the minimum size the window can be resized to.
(WebKit::WebInspectorProxy::onCloseEvent): Hide the window, and call WebInspectorProxy::close.
(WebKit::WebInspectorProxy::platformCreateInspectorPage): Create a WKView and return its page.
(WebKit::WebInspectorProxy::platformOpen): Create an HWND for the inspector, put the inspector's WKView
    inside of it, and show the window.
(WebKit::WebInspectorProxy::platformClose): Destroy the inspector's window (which destroys the child WKView), 
    and 0 out instance variables.
(WebKit::WebInspectorProxy::inspectorPageURL): Finds inspector/inspector.html in the WebKit bundle.



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@73877 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent 04da2a5b
2010-12-11 Brian Weinstein <bweinstein@apple.com>
Reviewed by Sam Weinig.
Web Inspector: Make inspector on Windows show and be usable in WebKit2
https://bugs.webkit.org/show_bug.cgi?id=50877
Hook up the unimplemented methods in WebInspectorProxyWin to get the web inspector
showing and usable in WebKit2 on Windows.
* UIProcess/WebInspectorProxy.cpp:
(WebKit::WebInspectorProxy::WebInspectorProxy): Initialize Windows-specific variables to 0.
* UIProcess/WebInspectorProxy.h:
* UIProcess/win/WebInspectorProxyWin.cpp:
(WebKit::WebInspectorProxy::registerInspectorViewWindowClass): Sets up the inspector view class.
(WebKit::WebInspectorProxy::InspectorViewWndProc): Calls through to the WebInspectorProxy's non-static
WndProc.
(WebKit::WebInspectorProxy::wndProc): Handles WM_SIZE, WM_CLOSE, and WM_GETMINMAXINFO, the rest go to
::DefWindowProc.
(WebKit::WebInspectorProxy::onSizeEvent): Resize the WKView that has the inspector page to match the
outer window that was just resized.
(WebKit::WebInspectorProxy::onMinMaxInfoEvent): Set the minimum size the window can be resized to.
(WebKit::WebInspectorProxy::onCloseEvent): Hide the window, and call WebInspectorProxy::close.
(WebKit::WebInspectorProxy::platformCreateInspectorPage): Create a WKView and return its page.
(WebKit::WebInspectorProxy::platformOpen): Create an HWND for the inspector, put the inspector's WKView
inside of it, and show the window.
(WebKit::WebInspectorProxy::platformClose): Destroy the inspector's window (which destroys the child WKView),
and 0 out instance variables.
(WebKit::WebInspectorProxy::inspectorPageURL): Finds inspector/inspector.html in the WebKit bundle.
2010-12-12 Balazs Kelemen <kbalazs@webkit.org>
Reviewed by Andreas Kling.
......@@ -53,6 +53,10 @@ WebInspectorProxy::WebInspectorProxy(WebPageProxy* page)
, m_isDebuggingJavaScript(false)
, m_isProfilingJavaScript(false)
, m_isProfilingPage(false)
#if PLATFORM(WIN)
, m_inspectorWindow(0)
, m_inspectorView(0)
#endif
{
}
......
......@@ -52,6 +52,10 @@ class WebPageGroup;
class WebPageProxy;
struct WebPageCreationParameters;
#if PLATFORM(WIN)
class WebView;
#endif
class WebInspectorProxy : public APIObject {
public:
static const Type APIType = TypeInspector;
......@@ -112,6 +116,16 @@ private:
static WebPageGroup* inspectorPageGroup();
#if PLATFORM(WIN)
static bool registerInspectorViewWindowClass();
static LRESULT CALLBACK InspectorViewWndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT onSizeEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
LRESULT onMinMaxInfoEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
LRESULT onCloseEvent(HWND hWnd, UINT message, WPARAM, LPARAM, bool& handled);
#endif
static const unsigned minimumWindowWidth = 500;
static const unsigned minimumWindowHeight = 400;
......@@ -130,6 +144,9 @@ private:
RetainPtr<WKView> m_inspectorView;
RetainPtr<NSWindow> m_inspectorWindow;
RetainPtr<WebInspectorProxyObjCAdapter> m_inspectorProxyObjCAdapter;
#elif PLATFORM(WIN)
HWND m_inspectorWindow;
WebView* m_inspectorView;
#endif
};
......
......@@ -27,33 +27,155 @@
#if ENABLE(INSPECTOR)
#include "WebPageProxy.h"
#include "WebView.h"
#include <WebCore/WebCoreInstanceHandle.h>
#include <wtf/PassRefPtr.h>
#include <wtf/text/WTFString.h>
#define DISABLE_NOT_IMPLEMENTED_WARNINGS 1
#include "NotImplemented.h"
using namespace WebCore;
namespace WebKit {
WebPageProxy* WebInspectorProxy::platformCreateInspectorPage()
static const LPCWSTR kWebKit2InspectorWindowClassName = L"WebKit2InspectorWindowClass";
bool WebInspectorProxy::registerInspectorViewWindowClass()
{
static bool haveRegisteredWindowClass = false;
if (haveRegisteredWindowClass)
return true;
haveRegisteredWindowClass = true;
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_DBLCLKS;
wcex.lpfnWndProc = WebInspectorProxy::InspectorViewWndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = sizeof(WebInspectorProxy*);
wcex.hInstance = instanceHandle();
wcex.hIcon = 0;
wcex.hCursor = ::LoadCursor(0, IDC_ARROW);
wcex.hbrBackground = 0;
wcex.lpszMenuName = 0;
wcex.lpszClassName = kWebKit2InspectorWindowClassName;
wcex.hIconSm = 0;
return !!::RegisterClassEx(&wcex);
}
LRESULT CALLBACK WebInspectorProxy::InspectorViewWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
LONG_PTR longPtr = ::GetWindowLongPtr(hWnd, 0);
if (WebInspectorProxy* inspectorView = reinterpret_cast<WebInspectorProxy*>(longPtr))
return inspectorView->wndProc(hWnd, message, wParam, lParam);
if (message == WM_CREATE) {
LPCREATESTRUCT createStruct = reinterpret_cast<LPCREATESTRUCT>(lParam);
// Associate the WebInspectorProxy with the window.
::SetWindowLongPtr(hWnd, 0, (LONG_PTR)createStruct->lpCreateParams);
return 0;
}
return ::DefWindowProc(hWnd, message, wParam, lParam);
}
LRESULT WebInspectorProxy::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT lResult = 0;
bool handled = true;
switch (message) {
case WM_SIZE:
lResult = onSizeEvent(hWnd, message, wParam, lParam, handled);
break;
case WM_GETMINMAXINFO:
lResult = onMinMaxInfoEvent(hWnd, message, wParam, lParam, handled);
break;
case WM_CLOSE:
lResult = onCloseEvent(hWnd, message, wParam, lParam, handled);
break;
default:
handled = false;
break;
}
if (!handled)
lResult = ::DefWindowProc(hWnd, message, wParam, lParam);
return lResult;
}
LRESULT WebInspectorProxy::onSizeEvent(HWND, UINT, WPARAM, LPARAM, bool&)
{
RECT rect;
::GetClientRect(m_inspectorWindow, &rect);
::SetWindowPos(m_inspectorView->window(), 0, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER);
return 0;
}
LRESULT WebInspectorProxy::onMinMaxInfoEvent(HWND, UINT, WPARAM, LPARAM lParam, bool&)
{
notImplemented();
MINMAXINFO* info = reinterpret_cast<MINMAXINFO*>(lParam);
POINT size = {minimumWindowWidth, minimumWindowHeight};
info->ptMinTrackSize = size;
return 0;
}
LRESULT WebInspectorProxy::onCloseEvent(HWND, UINT, WPARAM, LPARAM, bool&)
{
::ShowWindow(m_inspectorWindow, SW_HIDE);
close();
return 0;
}
WebPageProxy* WebInspectorProxy::platformCreateInspectorPage()
{
ASSERT(!m_inspectorView);
ASSERT(!m_inspectorWindow);
RECT emptyRect = {0};
m_inspectorView = WebView::create(emptyRect, m_page->pageNamespace(), inspectorPageGroup(), 0).leakRef();
return m_inspectorView->page();
}
void WebInspectorProxy::platformOpen()
{
notImplemented();
registerInspectorViewWindowClass();
m_inspectorWindow = ::CreateWindowEx(0, kWebKit2InspectorWindowClassName, 0, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
0, 0, initialWindowWidth, initialWindowHeight, 0, 0, instanceHandle(), this);
ASSERT(::IsWindow(m_inspectorWindow));
m_inspectorView->setParentWindow(m_inspectorWindow);
::ShowWindow(m_inspectorWindow, SW_SHOW);
}
void WebInspectorProxy::platformClose()
{
notImplemented();
ASSERT(m_inspectorWindow);
ASSERT(m_inspectorView);
::DestroyWindow(m_inspectorWindow);
m_inspectorWindow = 0;
m_inspectorView = 0;
}
String WebInspectorProxy::inspectorPageURL() const
{
notImplemented();
return String();
RetainPtr<CFURLRef> htmlURLRef(AdoptCF, CFBundleCopyResourceURL(CFBundleGetBundleWithIdentifier(CFSTR("com.apple.WebKit")), CFSTR("inspector"), CFSTR("html"), CFSTR("inspector")));
if (!htmlURLRef)
return String();
return String(CFURLGetString(htmlURLRef.get()));
}
} // namespace WebKit
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment