String WebInspectorProxy::inspectorPageGroupIdentifier() const { return String::format("__WebInspectorPageGroupLevel%u__", inspectionLevel()); }
// Called by WebInspectorProxy messages void WebInspectorProxy::createInspectorPage(IPC::Attachment connectionIdentifier, bool canAttach, bool underTest) { if (!m_inspectedPage) return; m_underTest = underTest; eagerlyCreateInspectorPage(); ASSERT(m_inspectorPage); if (!m_inspectorPage) return; m_connectionIdentifier = WTF::move(connectionIdentifier); m_inspectorPage->process().send(Messages::WebInspectorUI::EstablishConnection(m_connectionIdentifier, m_inspectedPage->pageID(), m_underTest, inspectionLevel()), m_inspectorPage->pageID()); if (!m_underTest) { m_canAttach = platformCanAttach(canAttach); m_isAttached = shouldOpenAttached(); m_attachmentSide = static_cast<AttachmentSide>(inspectorPagePreferences().inspectorAttachmentSide()); m_inspectedPage->process().send(Messages::WebInspector::SetAttached(m_isAttached), m_inspectedPage->pageID()); if (m_isAttached) { switch (m_attachmentSide) { case AttachmentSide::Bottom: m_inspectorPage->process().send(Messages::WebInspectorUI::AttachedBottom(), m_inspectorPage->pageID()); break; case AttachmentSide::Right: m_inspectorPage->process().send(Messages::WebInspectorUI::AttachedRight(), m_inspectorPage->pageID()); break; } } else m_inspectorPage->process().send(Messages::WebInspectorUI::Detached(), m_inspectorPage->pageID()); m_inspectorPage->process().send(Messages::WebInspectorUI::SetDockingUnavailable(!m_canAttach), m_inspectorPage->pageID()); } m_inspectorPage->loadRequest(URL(URL(), m_underTest ? WebInspectorProxy::inspectorTestPageURL() : WebInspectorProxy::inspectorPageURL())); }
void WebInspectorProxy::didRelaunchInspectorPageProcess() { m_inspectorPage->process().addMessageReceiver(Messages::WebInspectorProxy::messageReceiverName(), m_inspectedPage->pageID(), *this); m_inspectorPage->process().assumeReadAccessToBaseURL(WebInspectorProxy::inspectorBaseURL()); // When didRelaunchInspectorPageProcess is called we can assume it is during a load request. // Any messages we would have sent to a terminated process need to be re-sent. m_inspectorPage->process().send(Messages::WebInspectorUI::EstablishConnection(m_connectionIdentifier, m_inspectedPage->pageID(), m_underTest, inspectionLevel()), m_inspectorPage->pageID()); }
void WebInspectorProxy::eagerlyCreateInspectorPage() { if (m_inspectorPage) return; m_inspectorPage = platformCreateInspectorPage(); ASSERT(m_inspectorPage); if (!m_inspectorPage) return; pageLevelMap().set(m_inspectorPage, inspectionLevel()); WKPagePolicyClientV1 policyClient = { { 1, this }, nullptr, // decidePolicyForNavigationAction_deprecatedForUseWithV0 nullptr, // decidePolicyForNewWindowAction nullptr, // decidePolicyForResponse_deprecatedForUseWithV0 nullptr, // unableToImplementPolicy decidePolicyForNavigationAction, nullptr, // decidePolicyForResponse }; WKPageLoaderClientV5 loaderClient = { { 5, this }, nullptr, // didStartProvisionalLoadForFrame nullptr, // didReceiveServerRedirectForProvisionalLoadForFrame nullptr, // didFailProvisionalLoadWithErrorForFrame nullptr, // didCommitLoadForFrame nullptr, // didFinishDocumentLoadForFrame nullptr, // didFinishLoadForFrame nullptr, // didFailLoadWithErrorForFrame nullptr, // didSameDocumentNavigationForFrame nullptr, // didReceiveTitleForFrame nullptr, // didFirstLayoutForFrame nullptr, // didFirstVisuallyNonEmptyLayoutForFrame nullptr, // didRemoveFrameFromHierarchy nullptr, // didDisplayInsecureContentForFrame nullptr, // didRunInsecureContentForFrame nullptr, // canAuthenticateAgainstProtectionSpaceInFrame nullptr, // didReceiveAuthenticationChallengeInFrame nullptr, // didStartProgress nullptr, // didChangeProgress nullptr, // didFinishProgress nullptr, // didBecomeUnresponsive nullptr, // didBecomeResponsive processDidCrash, nullptr, // didChangeBackForwardList nullptr, // shouldGoToBackForwardListItem nullptr, // didFailToInitializePlugin_deprecatedForUseWithV0 nullptr, // didDetectXSSForFrame nullptr, // didNewFirstVisuallyNonEmptyLayout_unavailable nullptr, // willGoToBackForwardListItem nullptr, // interactionOccurredWhileProcessUnresponsive nullptr, // pluginDidFail_deprecatedForUseWithV1 nullptr, // didReceiveIntentForFrame_unavailable nullptr, // registerIntentServiceForFrame_unavailable nullptr, // didLayout nullptr, // pluginLoadPolicy_deprecatedForUseWithV2 nullptr, // pluginDidFail nullptr, // pluginLoadPolicy nullptr, // webGLLoadPolicy nullptr, // resolveWebGLLoadPolicy nullptr, // shouldKeepCurrentBackForwardListItemInList }; WKPageContextMenuClientV3 contextMenuClient = { { 3, this }, 0, // getContextMenuFromProposedMenu_deprecatedForUseWithV0 0, // customContextMenuItemSelected 0, // contextMenuDismissed getContextMenuFromProposedMenu, 0, // showContextMenu 0, // hideContextMenu }; WKPageSetPagePolicyClient(toAPI(m_inspectorPage), &policyClient.base); WKPageSetPageLoaderClient(toAPI(m_inspectorPage), &loaderClient.base); WKPageSetPageContextMenuClient(toAPI(m_inspectorPage), &contextMenuClient.base); m_inspectorPage->process().addMessageReceiver(Messages::WebInspectorProxy::messageReceiverName(), m_inspectedPage->pageID(), *this); m_inspectorPage->process().assumeReadAccessToBaseURL(WebInspectorProxy::inspectorBaseURL()); }
WebPageProxy* WebInspectorProxy::platformCreateInspectorPage() { ASSERT(inspectedPage()); ASSERT(!m_inspectorView); RefPtr<WebPreferences> preferences = WebPreferences::create(String(), "WebKit2.", "WebKit2."); #ifndef NDEBUG // Allow developers to inspect the Web Inspector in debug builds without changing settings. preferences->setDeveloperExtrasEnabled(true); preferences->setLogsPageMessagesToSystemConsoleEnabled(true); #endif preferences->setJavaScriptRuntimeFlags({ }); RefPtr<WebPageGroup> pageGroup = WebPageGroup::create(inspectorPageGroupIdentifier(), false, false); auto pageConfiguration = API::PageConfiguration::create(); pageConfiguration->setProcessPool(&inspectorProcessPool(inspectionLevel())); pageConfiguration->setPreferences(preferences.get()); pageConfiguration->setPageGroup(pageGroup.get()); m_inspectorView = GTK_WIDGET(webkitWebViewBaseCreate(*pageConfiguration.ptr())); g_object_add_weak_pointer(G_OBJECT(m_inspectorView), reinterpret_cast<void**>(&m_inspectorView)); WKPageUIClientV2 uiClient = { { 2, this }, nullptr, // createNewPage_deprecatedForUseWithV0 nullptr, // showPage nullptr, // closePage nullptr, // takeFocus nullptr, // focus nullptr, // unfocus nullptr, // runJavaScriptAlert nullptr, // runJavaScriptConfirm nullptr, // runJavaScriptPrompt nullptr, // setStatusText nullptr, // mouseDidMoveOverElement_deprecatedForUseWithV0 nullptr, // missingPluginButtonClicked_deprecatedForUseWithV0 nullptr, // didNotHandleKeyEvent nullptr, // didNotHandleWheelEvent nullptr, // areToolbarsVisible nullptr, // setToolbarsVisible nullptr, // isMenuBarVisible nullptr, // setMenuBarVisible nullptr, // isStatusBarVisible nullptr, // setStatusBarVisible nullptr, // isResizable nullptr, // setResizable nullptr, // getWindowFrame, nullptr, // setWindowFrame, nullptr, // runBeforeUnloadConfirmPanel nullptr, // didDraw nullptr, // pageDidScroll exceededDatabaseQuota, nullptr, // runOpenPanel, nullptr, // decidePolicyForGeolocationPermissionRequest nullptr, // headerHeight nullptr, // footerHeight nullptr, // drawHeader nullptr, // drawFooter nullptr, // printFrame nullptr, // runModal nullptr, // unused nullptr, // saveDataToFileInDownloadsFolder nullptr, // shouldInterruptJavaScript nullptr, // createPage nullptr, // mouseDidMoveOverElement nullptr, // decidePolicyForNotificationPermissionRequest nullptr, // unavailablePluginButtonClicked_deprecatedForUseWithV1 nullptr, // showColorPicker nullptr, // hideColorPicker nullptr, // unavailablePluginButtonClicked }; WebPageProxy* inspectorPage = webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(m_inspectorView)); ASSERT(inspectorPage); WKPageSetPageUIClient(toAPI(inspectorPage), &uiClient.base); return inspectorPage; }