18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebInspectorClient.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "DOMNodeInternal.h" 320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "WebDelegateImplementationCaching.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrameInternal.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrameView.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebInspector.h" 36f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#import "WebInspectorPrivate.h" 37f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#import "WebInspectorFrontend.h" 3881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#import "WebLocalizableStringsInternal.h" 392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#import "WebNodeHighlighter.h" 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebUIDelegate.h" 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebViewInternal.h" 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/InspectorController.h> 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Page.h> 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebKit/DOMExtensions.h> 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebKitSystemInterface.h> 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#import <wtf/PassOwnPtr.h> 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WebCore; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@interface WebInspectorWindowController : NSWindowController <NSWindowDelegate> { 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@private 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebView *_inspectedWebView; 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebView *_webView; 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebInspectorFrontendClient* _frontendClient; 55545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch WebInspectorClient* _inspectorClient; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL _attachedToInspectedWebView; 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL _shouldAttach; 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL _visible; 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block BOOL _destroyingInspectorView; 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithInspectedWebView:(WebView *)webView; 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebView *)webView; 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)attach; 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)detach; 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block- (BOOL)attached; 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block- (void)setFrontendClient:(WebInspectorFrontendClient*)frontendClient; 67545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch- (void)setInspectorClient:(WebInspectorClient*)inspectorClient; 682bde8e466a4451c7319e3a072d118917957d6554Steve Block- (WebInspectorClient*)inspectorClient; 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setAttachedWindowHeight:(unsigned)height; 705abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick- (void)destroyInspectorView:(bool)notifyInspectorController; 71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block@end 72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 74cad810f21b803229eb11403f9209855525a25d57Steve Block// MARK: - 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspectorClient::WebInspectorClient(WebView *webView) 772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch : m_webView(webView) 782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_highlighter(AdoptNS, [[WebNodeHighlighter alloc] initWithInspectedWebView:webView]) 792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_frontendPage(0) 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid WebInspectorClient::inspectorDestroyed() 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete this; 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid WebInspectorClient::openInspectorFrontend(InspectorController* inspectorController) 89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 90dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block RetainPtr<WebInspectorWindowController> windowController(AdoptNS, [[WebInspectorWindowController alloc] initWithInspectedWebView:m_webView]); 91545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch [windowController.get() setInspectorClient:this]; 92f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 93545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_frontendPage = core([windowController.get() webView]); 942bde8e466a4451c7319e3a072d118917957d6554Steve Block OwnPtr<WebInspectorFrontendClient> frontendClient = adoptPtr(new WebInspectorFrontendClient(m_webView, windowController.get(), inspectorController, m_frontendPage, createFrontendSettings())); 952bde8e466a4451c7319e3a072d118917957d6554Steve Block RetainPtr<WebInspectorFrontend> webInspectorFrontend(AdoptNS, [[WebInspectorFrontend alloc] initWithFrontendClient:frontendClient.get()]); 962bde8e466a4451c7319e3a072d118917957d6554Steve Block [[m_webView inspector] setFrontend:webInspectorFrontend.get()]; 972bde8e466a4451c7319e3a072d118917957d6554Steve Block m_frontendPage->inspectorController()->setInspectorFrontendClient(frontendClient.release()); 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid WebInspectorClient::highlight(Node* node) 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block [m_highlighter.get() highlightNode:kit(node)]; 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 104dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid WebInspectorClient::hideHighlight() 106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block [m_highlighter.get() hideHighlight]; 108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1102fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockWebInspectorFrontendClient::WebInspectorFrontendClient(WebView* inspectedWebView, WebInspectorWindowController* windowController, InspectorController* inspectorController, Page* frontendPage, WTF::PassOwnPtr<Settings> settings) 1112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block : InspectorFrontendClientLocal(inspectorController, frontendPage, settings) 112dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_inspectedWebView(inspectedWebView) 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_windowController(windowController) 114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block [windowController setFrontendClient:this]; 116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid WebInspectorFrontendClient::frontendLoaded() 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block [m_windowController.get() showWindow:nil]; 121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if ([m_windowController.get() attached]) 122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block restoreAttachedWindowHeight(); 123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block InspectorFrontendClientLocal::frontendLoaded(); 125dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebFrame *frame = [m_inspectedWebView mainFrame]; 127dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 128dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block WebFrameLoadDelegateImplementationCache* implementations = WebViewGetFrameLoadDelegateImplementations(m_inspectedWebView); 129dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (implementations->didClearInspectorWindowObjectForFrameFunc) 130dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CallFrameLoadDelegate(implementations->didClearInspectorWindowObjectForFrameFunc, m_inspectedWebView, 131dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block @selector(webView:didClearInspectorWindowObject:forFrame:), [frame windowObject], frame); 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 133dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool attached = [m_windowController.get() attached]; 134dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block setAttachedWindow(attached); 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockString WebInspectorFrontendClient::localizedStringsURL() 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.WebCore"] pathForResource:@"localizedStrings" ofType:@"js"]; 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (path) 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[NSURL fileURLWithPath:path] absoluteString]; 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return String(); 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockString WebInspectorFrontendClient::hiddenPanels() 146563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 147563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NSString *hiddenPanels = [[NSUserDefaults standardUserDefaults] stringForKey:@"WebKitInspectorHiddenPanels"]; 148563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (hiddenPanels) 149563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return hiddenPanels; 150563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return String(); 151563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 152563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid WebInspectorFrontendClient::bringToFront() 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project updateWindowTitle(); 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [m_windowController.get() showWindow:nil]; 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid WebInspectorFrontendClient::closeWindow() 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1615abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick [m_windowController.get() destroyInspectorView:true]; 1625abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 1635abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 1645abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickvoid WebInspectorFrontendClient::disconnectFromBackend() 1655abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 1665abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick [m_windowController.get() destroyInspectorView:false]; 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 169dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid WebInspectorFrontendClient::attachWindow() 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 171dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if ([m_windowController.get() attached]) 172dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [m_windowController.get() attach]; 174dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block restoreAttachedWindowHeight(); 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 177dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid WebInspectorFrontendClient::detachWindow() 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [m_windowController.get() detach]; 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 182dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid WebInspectorFrontendClient::setAttachedWindowHeight(unsigned height) 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [m_windowController.get() setAttachedWindowHeight:height]; 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid WebInspectorFrontendClient::inspectedURLChanged(const String& newURL) 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_inspectedURL = newURL; 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project updateWindowTitle(); 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1932bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebInspectorFrontendClient::saveSessionSetting(const String& key, const String& value) 1942bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1952bde8e466a4451c7319e3a072d118917957d6554Steve Block WebInspectorClient* client = [m_windowController.get() inspectorClient]; 1962bde8e466a4451c7319e3a072d118917957d6554Steve Block if (client) 1972bde8e466a4451c7319e3a072d118917957d6554Steve Block client->saveSessionSetting(key, value); 1982bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1992bde8e466a4451c7319e3a072d118917957d6554Steve Block 2002bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebInspectorFrontendClient::loadSessionSetting(const String& key, String* value) 2012bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 2022bde8e466a4451c7319e3a072d118917957d6554Steve Block WebInspectorClient* client = [m_windowController.get() inspectorClient]; 2032bde8e466a4451c7319e3a072d118917957d6554Steve Block if (client) 2042bde8e466a4451c7319e3a072d118917957d6554Steve Block client->loadSessionSetting(key, value); 2052bde8e466a4451c7319e3a072d118917957d6554Steve Block} 2062bde8e466a4451c7319e3a072d118917957d6554Steve Block 207dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid WebInspectorFrontendClient::updateWindowTitle() const 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 20981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch NSString *title = [NSString stringWithFormat:UI_STRING_INTERNAL("Web Inspector — %@", "Web Inspector window title"), (NSString *)m_inspectedURL]; 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[m_windowController.get() window] setTitle:title]; 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 214cad810f21b803229eb11403f9209855525a25d57Steve Block// MARK: - 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebInspectorWindowController 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)init 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!(self = [super initWithWindow:nil])) 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Keep preferences separate from the rest of the client, making sure we are using expected preference values. 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebPreferences *preferences = [[WebPreferences alloc] init]; 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences setAutosaves:NO]; 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences setLoadsImagesAutomatically:YES]; 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences setAuthorAndUserStylesEnabled:YES]; 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences setJavaScriptEnabled:YES]; 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences setAllowsAnimatedImages:YES]; 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences setPlugInsEnabled:NO]; 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences setJavaEnabled:NO]; 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences setUserStyleSheetEnabled:NO]; 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences setTabsToLinks:NO]; 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences setMinimumFontSize:0]; 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences setMinimumLogicalFontSize:9]; 2360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 2370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [preferences setFixedFontFamily:@"Menlo"]; 2380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [preferences setDefaultFixedFontSize:11]; 2390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#else 2400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [preferences setFixedFontFamily:@"Monaco"]; 2410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [preferences setDefaultFixedFontSize:10]; 2420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _webView = [[WebView alloc] init]; 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_webView setPreferences:preferences]; 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_webView setDrawsBackground:NO]; 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_webView setProhibitsMainFrameScrolling:YES]; 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_webView setUIDelegate:self]; 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences release]; 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *path = [[NSBundle bundleWithIdentifier:@"com.apple.WebCore"] pathForResource:@"inspector" ofType:@"html" inDirectory:@"inspector"]; 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL fileURLWithPath:path]]; 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[_webView mainFrame] loadRequest:request]; 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [request release]; 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setWindowFrameAutosaveName:@"Web Inspector 2"]; 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithInspectedWebView:(WebView *)webView 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!(self = [self init])) 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Don't retain to avoid a circular reference. 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _inspectedWebView = webView; 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)dealloc 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_webView release]; 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super dealloc]; 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 277cad810f21b803229eb11403f9209855525a25d57Steve Block// MARK: - 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebView *)webView 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _webView; 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSWindow *)window 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSWindow *window = [super window]; 2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (window) 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return window; 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSUInteger styleMask = (NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask); 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef BUILDING_ON_TIGER 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project styleMask |= NSTexturedBackgroundWindowMask; 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project window = [[NSWindow alloc] initWithContentRect:NSMakeRect(60.0, 200.0, 750.0, 650.0) styleMask:styleMask backing:NSBackingStoreBuffered defer:NO]; 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [window setDelegate:self]; 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [window setMinSize:NSMakeSize(400.0, 400.0)]; 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef BUILDING_ON_TIGER 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [window setAutorecalculatesContentBorderThickness:NO forEdge:NSMaxYEdge]; 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [window setContentBorderThickness:55. forEdge:NSMaxYEdge]; 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WKNSWindowMakeBottomCornersSquare(window); 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setWindow:window]; 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [window release]; 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return window; 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 313cad810f21b803229eb11403f9209855525a25d57Steve Block// MARK: - 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)windowShouldClose:(id)sender 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3175abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick [self destroyInspectorView:true]; 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)close 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_visible) 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _visible = NO; 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_attachedToInspectedWebView) { 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([_inspectedWebView _isClosed]) 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_webView removeFromSuperview]; 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrameView *frameView = [[_inspectedWebView mainFrame] frameView]; 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRect frameViewRect = [frameView frame]; 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Setting the height based on the previous height is done to work with 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Safari's find banner. This assumes the previous height is the Y origin. 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameViewRect.size.height += NSMinY(frameViewRect); 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameViewRect.origin.y = 0.0; 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [frameView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [frameView setFrame:frameViewRect]; 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_inspectedWebView displayIfNeeded]; 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super close]; 3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)showWindow:(id)sender 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_visible) { 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_attachedToInspectedWebView) 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super showWindow:sender]; // call super so the window will be ordered front if needed 3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _visible = YES; 3600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _shouldAttach = _inspectorClient->inspectorStartsAttached(); 362dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 363dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (_shouldAttach && !_frontendClient->canAttachWindow()) 364dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _shouldAttach = NO; 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_shouldAttach) { 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrameView *frameView = [[_inspectedWebView mainFrame] frameView]; 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_webView removeFromSuperview]; 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_inspectedWebView addSubview:_webView positioned:NSWindowBelow relativeTo:(NSView *)frameView]; 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_webView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable | NSViewMaxYMargin)]; 3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [frameView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable | NSViewMinYMargin)]; 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _attachedToInspectedWebView = YES; 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _attachedToInspectedWebView = NO; 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView *contentView = [[self window] contentView]; 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_webView setFrame:[contentView frame]]; 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_webView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)]; 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_webView removeFromSuperview]; 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [contentView addSubview:_webView]; 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super showWindow:nil]; 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 389cad810f21b803229eb11403f9209855525a25d57Steve Block// MARK: - 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)attach 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_attachedToInspectedWebView) 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _inspectorClient->setInspectorStartsAttached(true); 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self close]; 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self showWindow:nil]; 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)detach 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_attachedToInspectedWebView) 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block _inspectorClient->setInspectorStartsAttached(false); 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self close]; 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self showWindow:nil]; 411dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 413dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block- (BOOL)attached 414dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 415dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return _attachedToInspectedWebView; 416dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 418dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block- (void)setFrontendClient:(WebInspectorFrontendClient*)frontendClient 419dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 420dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _frontendClient = frontendClient; 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 423545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch- (void)setInspectorClient:(WebInspectorClient*)inspectorClient 424545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 425545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch _inspectorClient = inspectorClient; 426545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 427545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 4282bde8e466a4451c7319e3a072d118917957d6554Steve Block- (WebInspectorClient*)inspectorClient 4292bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 4302bde8e466a4451c7319e3a072d118917957d6554Steve Block return _inspectorClient; 4312bde8e466a4451c7319e3a072d118917957d6554Steve Block} 4322bde8e466a4451c7319e3a072d118917957d6554Steve Block 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setAttachedWindowHeight:(unsigned)height 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_attachedToInspectedWebView) 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrameView *frameView = [[_inspectedWebView mainFrame] frameView]; 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRect frameViewRect = [frameView frame]; 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Setting the height based on the difference is done to work with 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Safari's find banner. This assumes the previous height is the Y origin. 4430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CGFloat heightDifference = (NSMinY(frameViewRect) - height); 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameViewRect.size.height += heightDifference; 4450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch frameViewRect.origin.y = height; 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [_webView setFrame:NSMakeRect(0.0, 0.0, NSWidth(frameViewRect), height)]; 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [frameView setFrame:frameViewRect]; 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4515abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick- (void)destroyInspectorView:(bool)notifyInspectorController 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 453dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (_destroyingInspectorView) 454dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 455dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _destroyingInspectorView = YES; 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 457dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (_attachedToInspectedWebView) 458dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block [self close]; 4596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 460dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _visible = NO; 4616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 4625abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (notifyInspectorController) { 4635abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (Page* inspectedPage = [_inspectedWebView page]) 4645abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick inspectedPage->inspectorController()->disconnectFrontend(); 4656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 4665abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick _inspectorClient->releaseFrontendPage(); 4675abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick } 468545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 469dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block [_webView close]; 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 472cad810f21b803229eb11403f9209855525a25d57Steve Block// MARK: - 473cad810f21b803229eb11403f9209855525a25d57Steve Block// MARK: UI delegate 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSUInteger)webView:(WebView *)sender dragDestinationActionMaskForDraggingInfo:(id <NSDraggingInfo>)draggingInfo 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return WebDragDestinationActionNone; 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 480cad810f21b803229eb11403f9209855525a25d57Steve Block// MARK: - 4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// These methods can be used by UI elements such as menu items and toolbar buttons when the inspector is the key window. 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// This method is really only implemented to keep any UI elements enabled. 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)showWebInspector:(id)sender 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[_inspectedWebView inspector] show:sender]; 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)showErrorConsole:(id)sender 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[_inspectedWebView inspector] showConsole:sender]; 4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)toggleDebuggingJavaScript:(id)sender 4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[_inspectedWebView inspector] toggleDebuggingJavaScript:sender]; 4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)toggleProfilingJavaScript:(id)sender 5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[_inspectedWebView inspector] toggleProfilingJavaScript:sender]; 5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL isMenuItem = [(id)item isKindOfClass:[NSMenuItem class]]; 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([item action] == @selector(toggleDebuggingJavaScript:) && isMenuItem) { 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMenuItem *menuItem = (NSMenuItem *)item; 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([[_inspectedWebView inspector] isDebuggingJavaScript]) 51181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch [menuItem setTitle:UI_STRING_INTERNAL("Stop Debugging JavaScript", "title for Stop Debugging JavaScript menu item")]; 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 51381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch [menuItem setTitle:UI_STRING_INTERNAL("Start Debugging JavaScript", "title for Start Debugging JavaScript menu item")]; 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if ([item action] == @selector(toggleProfilingJavaScript:) && isMenuItem) { 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMenuItem *menuItem = (NSMenuItem *)item; 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([[_inspectedWebView inspector] isProfilingJavaScript]) 51781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch [menuItem setTitle:UI_STRING_INTERNAL("Stop Profiling JavaScript", "title for Stop Profiling JavaScript menu item")]; 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 51981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch [menuItem setTitle:UI_STRING_INTERNAL("Start Profiling JavaScript", "title for Start Profiling JavaScript menu item")]; 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 526