void AssistedNodeInformation::encode(IPC::ArgumentEncoder& encoder) const { encoder << elementRect; encoder << selectionRect; encoder << minimumScaleFactor; encoder << maximumScaleFactor; encoder << nodeFontSize; encoder << hasNextNode; encoder << hasPreviousNode; encoder << isAutocorrect; encoder << isRTL; encoder.encodeEnum(autocapitalizeType); encoder.encodeEnum(elementType); encoder << formAction; encoder << selectOptions; encoder << selectedIndex; encoder << isMultiSelect; encoder << isReadOnly; encoder << allowsUserScaling; encoder << allowsUserScalingIgnoringForceAlwaysScaling; encoder << insideFixedPosition; encoder << value; encoder << valueAsNumber; encoder << title; encoder.encodeEnum(autofillFieldName); }
void Coder<WebCore::CertificateInfo>::encode(Encoder& encoder, const WebCore::CertificateInfo& certificateInfo) { // FIXME: Cocoa CertificateInfo is a CF object tree. Generalize CF type coding so we don't need to use ArgumentCoder here. IPC::ArgumentEncoder argumentEncoder; argumentEncoder << certificateInfo; encoder << static_cast<uint64_t>(argumentEncoder.bufferSize()); encoder.encodeFixedLengthData(argumentEncoder.buffer(), argumentEncoder.bufferSize()); }
void WebContextMenuItemData::encode(IPC::ArgumentEncoder& encoder) const { // WebContextMenuItemDatas with a selection handler are meant to exist solely in the UIProcess and should never be sent over IPC. ASSERT(!m_selectionHandler); encoder.encodeEnum(m_type); encoder.encodeEnum(m_action); encoder << m_title; encoder << m_checked; encoder << m_enabled; encoder << m_submenu; }
void WebPageCreationParameters::encode(IPC::ArgumentEncoder& encoder) const { encoder << viewSize; encoder << viewState; encoder << store; encoder.encodeEnum(drawingAreaType); encoder << pageGroupData; encoder << drawsBackground; encoder << isEditable; encoder << drawsTransparentBackground; encoder << underlayColor; encoder << useFixedLayout; encoder << fixedLayoutSize; encoder.encodeEnum(paginationMode); encoder << paginationBehavesLikeColumns; encoder << pageLength; encoder << gapBetweenPages; encoder << userAgent; encoder << itemStates; encoder << sessionID; encoder << highestUsedBackForwardItemID; encoder << userContentControllerID; encoder << visitedLinkTableID; encoder << websiteDataStoreID; encoder << canRunBeforeUnloadConfirmPanel; encoder << canRunModal; encoder << deviceScaleFactor; encoder << topContentInset; encoder << mediaVolume; encoder << muted; encoder << mayStartMediaWhenInWindow; encoder << minimumLayoutSize; encoder << autoSizingShouldExpandToViewHeight; encoder.encodeEnum(scrollPinningBehavior); encoder << backgroundExtendsBeyondPage; encoder.encodeEnum(layerHostingMode); encoder << mimeTypesWithCustomContentProviders; #if ENABLE(REMOTE_INSPECTOR) encoder << allowsRemoteInspection; #endif #if PLATFORM(MAC) encoder << colorSpace; #endif #if PLATFORM(IOS) encoder << screenSize; encoder << availableScreenSize; encoder << textAutosizingWidth; #endif encoder << appleMailPaginationQuirkEnabled; }
void NetworkResourceLoadParameters::encode(IPC::ArgumentEncoder& encoder) const { encoder << identifier; encoder << webPageID; encoder << webFrameID; encoder << sessionID; encoder << request; encoder << static_cast<bool>(request.httpBody()); if (request.httpBody()) { EncoderAdapter httpBodyEncoderAdapter; request.httpBody()->encode(httpBodyEncoderAdapter); encoder << httpBodyEncoderAdapter.dataReference(); const Vector<FormDataElement>& elements = request.httpBody()->elements(); size_t fileCount = 0; for (size_t i = 0, count = elements.size(); i < count; ++i) { if (elements[i].m_type == FormDataElement::encodedFile) ++fileCount; } SandboxExtension::HandleArray requestBodySandboxExtensions; requestBodySandboxExtensions.allocate(fileCount); size_t extensionIndex = 0; for (size_t i = 0, count = elements.size(); i < count; ++i) { const FormDataElement& element = elements[i]; if (element.m_type == FormDataElement::encodedFile) { const String& path = element.m_shouldGenerateFile ? element.m_generatedFilename : element.m_filename; SandboxExtension::createHandle(path, SandboxExtension::ReadOnly, requestBodySandboxExtensions[extensionIndex++]); } } encoder << requestBodySandboxExtensions; } if (request.url().isLocalFile()) { SandboxExtension::Handle requestSandboxExtension; SandboxExtension::createHandle(request.url().fileSystemPath(), SandboxExtension::ReadOnly, requestSandboxExtension); encoder << requestSandboxExtension; } encoder.encodeEnum(priority); encoder.encodeEnum(contentSniffingPolicy); encoder.encodeEnum(allowStoredCredentials); encoder.encodeEnum(clientCredentialPolicy); encoder << shouldClearReferrerOnHTTPSToHTTPRedirect; encoder << isMainResource; }
void WebContext::postMessageToInjectedBundle(const String& messageName, API::Object* messageBody) { if (m_processes.isEmpty()) { if (m_processModel == ProcessModelSharedSecondaryProcess) m_messagesToInjectedBundlePostedToEmptyContext.append(std::make_pair(messageName, messageBody)); return; } for (auto& process : m_processes) { // FIXME: Return early if the message body contains any references to WKPageRefs/WKFrameRefs etc. since they're local to a process. IPC::ArgumentEncoder messageData; messageData.encode(messageName); messageData.encode(WebContextUserMessageEncoder(messageBody, *process.get())); process->send(Messages::WebProcess::PostInjectedBundleMessage(IPC::DataReference(messageData.buffer(), messageData.bufferSize())), 0); } }
void UserData::encode(IPC::ArgumentEncoder& encoder, const API::Object* object) const { if (!object) { encoder.encodeEnum(API::Object::Type::Null); return; } encode(encoder, *object); }
void NetworkProcessCreationParameters::encode(IPC::ArgumentEncoder& encoder) const { encoder << privateBrowsingEnabled; encoder.encodeEnum(cacheModel); encoder << diskCacheSizeOverride; encoder << canHandleHTTPSServerTrustEvaluation; encoder << diskCacheDirectory; encoder << diskCacheDirectoryExtensionHandle; #if ENABLE(NETWORK_CACHE) encoder << shouldEnableNetworkCache; encoder << shouldEnableNetworkCacheEfficacyLogging; #endif #if ENABLE(SECCOMP_FILTERS) encoder << cookieStorageDirectory; #endif #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100 encoder << uiProcessCookieStorageIdentifier; #endif #if PLATFORM(IOS) encoder << cookieStorageDirectoryExtensionHandle; encoder << containerCachesDirectoryExtensionHandle; encoder << parentBundleDirectoryExtensionHandle; #endif encoder << shouldUseTestingNetworkSession; encoder << urlSchemesRegisteredForCustomProtocols; #if PLATFORM(COCOA) encoder << parentProcessName; encoder << uiProcessBundleIdentifier; encoder << nsURLCacheMemoryCapacity; encoder << nsURLCacheDiskCapacity; encoder << httpProxy; encoder << httpsProxy; #if TARGET_OS_IPHONE || (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) IPC::encode(encoder, networkATSContext.get()); #endif #endif #if USE(SOUP) encoder << cookiePersistentStoragePath; encoder << cookiePersistentStorageType; encoder.encodeEnum(cookieAcceptPolicy); encoder << ignoreTLSErrors; encoder << languages; #endif }
void HTTPBody::Element::encode(IPC::ArgumentEncoder& encoder) const { encoder.encodeEnum(type); encoder << data; encoder << filePath; encoder << fileStart; encoder << fileLength; encoder << expectedFileModificationTime; encoder << blobURLString; }
void QuickLookDocumentData::encode(IPC::ArgumentEncoder& encoder) const { uint64_t size = 0; for (const auto& data : m_data) size += CFDataGetLength(data.get()); encoder << size; for (const auto& data : m_data) encoder.encodeFixedLengthData(CFDataGetBytePtr(data.get()), CFDataGetLength(data.get()), 1); }
void PlatformPopupMenuData::encode(IPC::ArgumentEncoder& encoder) const { #if PLATFORM(COCOA) encoder << fontInfo; encoder << shouldPopOver; encoder << hideArrows; encoder.encodeEnum(menuSize); #else UNUSED_PARAM(encoder); #endif }
void Plugin::Parameters::encode(IPC::ArgumentEncoder& encoder) const { encoder << url.string(); encoder << names; encoder << values; encoder << mimeType; encoder << isFullFramePlugin; encoder << shouldUseManualLoader; #if PLATFORM(COCOA) encoder.encodeEnum(layerHostingMode); #endif }
void WebPageCreationParameters::encode(IPC::ArgumentEncoder& encoder) const { encoder << viewSize; encoder << viewState; encoder << store; encoder.encodeEnum(drawingAreaType); encoder << pageGroupData; encoder << drawsBackground; encoder << drawsTransparentBackground; encoder << underlayColor; encoder << areMemoryCacheClientCallsEnabled; encoder << useFixedLayout; encoder << fixedLayoutSize; encoder.encodeEnum(paginationMode); encoder << paginationBehavesLikeColumns; encoder << pageLength; encoder << gapBetweenPages; encoder << userAgent; encoder << sessionState; encoder << highestUsedBackForwardItemID; encoder << visitedLinkTableID; encoder << canRunBeforeUnloadConfirmPanel; encoder << canRunModal; encoder << deviceScaleFactor; encoder << mediaVolume; encoder << mayStartMediaWhenInWindow; encoder << minimumLayoutSize; encoder << autoSizingShouldExpandToViewHeight; encoder.encodeEnum(scrollPinningBehavior); encoder << backgroundExtendsBeyondPage; encoder.encodeEnum(layerHostingMode); #if PLATFORM(COCOA) encoder << colorSpace; #endif #if PLATFORM(IOS) encoder << viewportScreenSize; #endif }
void WebsiteData::Entry::encode(IPC::ArgumentEncoder& encoder) const { encoder << SecurityOriginData::fromSecurityOrigin(*origin); encoder.encodeEnum(type); }
void WebProcessCreationParameters::encode(IPC::ArgumentEncoder& encoder) const { encoder << injectedBundlePath; encoder << injectedBundlePathExtensionHandle; encoder << initializationUserData; encoder << applicationCacheDirectory; encoder << applicationCacheFlatFileSubdirectoryName; encoder << applicationCacheDirectoryExtensionHandle; encoder << webSQLDatabaseDirectory; encoder << webSQLDatabaseDirectoryExtensionHandle; encoder << mediaCacheDirectory; encoder << mediaCacheDirectoryExtensionHandle; #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100 encoder << uiProcessCookieStorageIdentifier; #endif #if PLATFORM(IOS) encoder << cookieStorageDirectoryExtensionHandle; encoder << containerCachesDirectoryExtensionHandle; encoder << containerTemporaryDirectoryExtensionHandle; #endif encoder << mediaKeyStorageDirectory; encoder << mediaKeyStorageDirectoryExtensionHandle; encoder << shouldUseTestingNetworkSession; encoder << urlSchemesRegisteredAsEmptyDocument; encoder << urlSchemesRegisteredAsSecure; encoder << urlSchemesRegisteredAsBypassingContentSecurityPolicy; encoder << urlSchemesForWhichDomainRelaxationIsForbidden; encoder << urlSchemesRegisteredAsLocal; encoder << urlSchemesRegisteredAsNoAccess; encoder << urlSchemesRegisteredAsDisplayIsolated; encoder << urlSchemesRegisteredAsCORSEnabled; encoder << urlSchemesRegisteredAsAlwaysRevalidated; #if ENABLE(CACHE_PARTITIONING) encoder << urlSchemesRegisteredAsCachePartitioned; #endif encoder.encodeEnum(cacheModel); encoder << shouldAlwaysUseComplexTextCodePath; encoder << shouldEnableMemoryPressureReliefLogging; encoder << shouldSuppressMemoryPressureHandler; encoder << shouldUseFontSmoothing; encoder << resourceLoadStatisticsEnabled; encoder << fontWhitelist; encoder << iconDatabaseEnabled; encoder << terminationTimeout; encoder << languages; encoder << textCheckerState; encoder << fullKeyboardAccessEnabled; encoder << defaultRequestTimeoutInterval; #if PLATFORM(COCOA) || USE(CFNETWORK) encoder << uiProcessBundleIdentifier; #endif #if PLATFORM(COCOA) encoder << presenterApplicationPid; encoder << accessibilityEnhancedUserInterfaceEnabled; encoder << acceleratedCompositingPort; encoder << uiProcessBundleResourcePath; encoder << uiProcessBundleResourcePathExtensionHandle; encoder << shouldEnableJIT; encoder << shouldEnableFTLJIT; encoder << !!bundleParameterData; if (bundleParameterData) encoder << bundleParameterData->dataReference(); #endif #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) encoder << notificationPermissions; #endif encoder << plugInAutoStartOriginHashes; encoder << plugInAutoStartOrigins; encoder << memoryCacheDisabled; #if ENABLE(SERVICE_CONTROLS) encoder << hasImageServices; encoder << hasSelectionServices; encoder << hasRichContentServices; #endif #if ENABLE(NETSCAPE_PLUGIN_API) encoder << pluginLoadClientPolicies; #endif #if TARGET_OS_IPHONE || (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100) IPC::encode(encoder, networkATSContext.get()); #endif }
void WebProcessCreationParameters::encode(IPC::ArgumentEncoder& encoder) const { encoder << injectedBundlePath; encoder << injectedBundlePathExtensionHandle; encoder << applicationCacheDirectory; encoder << applicationCacheDirectoryExtensionHandle; encoder << webSQLDatabaseDirectory; encoder << webSQLDatabaseDirectoryExtensionHandle; encoder << diskCacheDirectory; encoder << diskCacheDirectoryExtensionHandle; encoder << cookieStorageDirectory; #if PLATFORM(IOS) encoder << cookieStorageDirectoryExtensionHandle; encoder << openGLCacheDirectoryExtensionHandle; encoder << containerTemporaryDirectoryExtensionHandle; encoder << hstsDatabasePathExtensionHandle; #endif encoder << shouldUseTestingNetworkSession; encoder << urlSchemesRegistererdAsEmptyDocument; encoder << urlSchemesRegisteredAsSecure; encoder << urlSchemesForWhichDomainRelaxationIsForbidden; encoder << urlSchemesRegisteredAsLocal; encoder << urlSchemesRegisteredAsNoAccess; encoder << urlSchemesRegisteredAsDisplayIsolated; encoder << urlSchemesRegisteredAsCORSEnabled; #if ENABLE(CACHE_PARTITIONING) encoder << urlSchemesRegisteredAsCachePartitioned; #endif #if ENABLE(CUSTOM_PROTOCOLS) encoder << urlSchemesRegisteredForCustomProtocols; #endif #if USE(SOUP) #if !ENABLE(CUSTOM_PROTOCOLS) encoder << urlSchemesRegistered; #endif encoder << cookiePersistentStoragePath; encoder << cookiePersistentStorageType; encoder.encodeEnum(cookieAcceptPolicy); encoder << ignoreTLSErrors; #endif encoder.encodeEnum(cacheModel); encoder << shouldAlwaysUseComplexTextCodePath; encoder << shouldUseFontSmoothing; encoder << iconDatabaseEnabled; encoder << terminationTimeout; encoder << languages; encoder << textCheckerState; encoder << fullKeyboardAccessEnabled; encoder << defaultRequestTimeoutInterval; #if PLATFORM(COCOA) || USE(CFNETWORK) encoder << uiProcessBundleIdentifier; #endif #if PLATFORM(COCOA) encoder << presenterApplicationPid; encoder << accessibilityEnhancedUserInterfaceEnabled; encoder << nsURLCacheMemoryCapacity; encoder << nsURLCacheDiskCapacity; encoder << acceleratedCompositingPort; encoder << uiProcessBundleResourcePath; encoder << uiProcessBundleResourcePathExtensionHandle; encoder << shouldForceScreenFontSubstitution; encoder << shouldEnableKerningAndLigaturesByDefault; encoder << shouldEnableJIT; encoder << shouldEnableFTLJIT; encoder << shouldEnableMemoryPressureReliefLogging; encoder << !!bundleParameterData; if (bundleParameterData) encoder << bundleParameterData->dataReference(); #endif #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) encoder << notificationPermissions; #endif #if ENABLE(NETWORK_PROCESS) encoder << usesNetworkProcess; #endif encoder << plugInAutoStartOriginHashes; encoder << plugInAutoStartOrigins; encoder << memoryCacheDisabled; #if ENABLE(SERVICE_CONTROLS) encoder << hasImageServices; encoder << hasSelectionServices; #endif }
void UserData::encode(IPC::ArgumentEncoder& encoder, const API::Object& object) const { API::Object::Type type = object.type(); encoder.encodeEnum(type); switch (object.type()) { case API::Object::Type::Array: { auto& array = static_cast<const API::Array&>(object); encoder << static_cast<uint64_t>(array.size()); for (size_t i = 0; i < array.size(); ++i) encode(encoder, array.at(i)); break; } case API::Object::Type::Boolean: static_cast<const API::Boolean&>(object).encode(encoder); break; case API::Object::Type::Data: static_cast<const API::Data&>(object).encode(encoder); break; case API::Object::Type::Dictionary: { auto& dictionary = static_cast<const ImmutableDictionary&>(object); auto& map = dictionary.map(); encoder << static_cast<uint64_t>(map.size()); for (const auto& keyValuePair : map) { encoder << keyValuePair.key; encode(encoder, keyValuePair.value.get()); } break; } case API::Object::Type::Error: static_cast<const API::Error&>(object).encode(encoder); break; case API::Object::Type::FrameHandle: { auto& frameHandle = static_cast<const API::FrameHandle&>(object); encoder << frameHandle.frameID(); break; } case API::Object::Type::Point: static_cast<const API::Point&>(object).encode(encoder); break; case API::Object::Type::Rect: static_cast<const API::Rect&>(object).encode(encoder); break; case API::Object::Type::SerializedScriptValue: { auto& serializedScriptValue = static_cast<const WebSerializedScriptValue&>(object); encoder << serializedScriptValue.dataReference(); break; } case API::Object::Type::Size: static_cast<const API::Size&>(object).encode(encoder); break; case API::Object::Type::String: { auto& string = static_cast<const API::String&>(object); encoder << string.string(); break; } case API::Object::Type::URL: { static_cast<const API::URL&>(object).encode(encoder); break; } case API::Object::Type::URLRequest: static_cast<const API::URLRequest&>(object).encode(encoder); break; case API::Object::Type::URLResponse: static_cast<const API::URLResponse&>(object).encode(encoder); break; case API::Object::Type::UInt64: static_cast<const API::UInt64&>(object).encode(encoder); break; default: ASSERT_NOT_REACHED(); } }
WebProcessProxy& WebContext::createNewWebProcess() { #if ENABLE(NETWORK_PROCESS) if (m_usesNetworkProcess) ensureNetworkProcess(); #endif RefPtr<WebProcessProxy> process = WebProcessProxy::create(*this); WebProcessCreationParameters parameters; parameters.injectedBundlePath = injectedBundlePath(); if (!parameters.injectedBundlePath.isEmpty()) SandboxExtension::createHandle(parameters.injectedBundlePath, SandboxExtension::ReadOnly, parameters.injectedBundlePathExtensionHandle); parameters.applicationCacheDirectory = applicationCacheDirectory(); if (!parameters.applicationCacheDirectory.isEmpty()) SandboxExtension::createHandleForReadWriteDirectory(parameters.applicationCacheDirectory, parameters.applicationCacheDirectoryExtensionHandle); parameters.databaseDirectory = databaseDirectory(); if (!parameters.databaseDirectory.isEmpty()) SandboxExtension::createHandleForReadWriteDirectory(parameters.databaseDirectory, parameters.databaseDirectoryExtensionHandle); parameters.diskCacheDirectory = diskCacheDirectory(); if (!parameters.diskCacheDirectory.isEmpty()) SandboxExtension::createHandleForReadWriteDirectory(parameters.diskCacheDirectory, parameters.diskCacheDirectoryExtensionHandle); parameters.cookieStorageDirectory = cookieStorageDirectory(); if (!parameters.cookieStorageDirectory.isEmpty()) SandboxExtension::createHandleForReadWriteDirectory(parameters.cookieStorageDirectory, parameters.cookieStorageDirectoryExtensionHandle); parameters.shouldUseTestingNetworkSession = m_shouldUseTestingNetworkSession; parameters.cacheModel = m_cacheModel; parameters.languages = userPreferredLanguages(); copyToVector(m_schemesToRegisterAsEmptyDocument, parameters.urlSchemesRegistererdAsEmptyDocument); copyToVector(m_schemesToRegisterAsSecure, parameters.urlSchemesRegisteredAsSecure); copyToVector(m_schemesToSetDomainRelaxationForbiddenFor, parameters.urlSchemesForWhichDomainRelaxationIsForbidden); copyToVector(m_schemesToRegisterAsLocal, parameters.urlSchemesRegisteredAsLocal); copyToVector(m_schemesToRegisterAsNoAccess, parameters.urlSchemesRegisteredAsNoAccess); copyToVector(m_schemesToRegisterAsDisplayIsolated, parameters.urlSchemesRegisteredAsDisplayIsolated); copyToVector(m_schemesToRegisterAsCORSEnabled, parameters.urlSchemesRegisteredAsCORSEnabled); #if ENABLE(CACHE_PARTITIONING) copyToVector(m_schemesToRegisterAsCachePartitioned, parameters.urlSchemesRegisteredAsCachePartitioned); #endif parameters.shouldAlwaysUseComplexTextCodePath = m_alwaysUsesComplexTextCodePath; parameters.shouldUseFontSmoothing = m_shouldUseFontSmoothing; parameters.iconDatabaseEnabled = !iconDatabasePath().isEmpty(); parameters.terminationTimeout = (m_processModel == ProcessModelSharedSecondaryProcess) ? sharedSecondaryProcessShutdownTimeout : 0; parameters.textCheckerState = TextChecker::state(); parameters.fullKeyboardAccessEnabled = WebProcessProxy::fullKeyboardAccessEnabled(); parameters.defaultRequestTimeoutInterval = API::URLRequest::defaultTimeoutInterval(); #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) // FIXME: There should be a generic way for supplements to add to the intialization parameters. supplement<WebNotificationManagerProxy>()->populateCopyOfNotificationPermissions(parameters.notificationPermissions); #endif #if ENABLE(NETWORK_PROCESS) parameters.usesNetworkProcess = m_usesNetworkProcess; #endif parameters.plugInAutoStartOriginHashes = m_plugInAutoStartProvider.autoStartOriginHashesCopy(); copyToVector(m_plugInAutoStartProvider.autoStartOrigins(), parameters.plugInAutoStartOrigins); parameters.memoryCacheDisabled = m_memoryCacheDisabled; #if ENABLE(SERVICE_CONTROLS) parameters.hasImageServices = ServicesController::shared().hasImageServices(); parameters.hasSelectionServices = ServicesController::shared().hasSelectionServices(); ServicesController::shared().refreshExistingServices(this); #endif // Add any platform specific parameters platformInitializeWebProcess(parameters); RefPtr<API::Object> injectedBundleInitializationUserData = m_injectedBundleClient.getInjectedBundleInitializationUserData(this); if (!injectedBundleInitializationUserData) injectedBundleInitializationUserData = m_injectedBundleInitializationUserData; process->send(Messages::WebProcess::InitializeWebProcess(parameters, WebContextUserMessageEncoder(injectedBundleInitializationUserData.get(), *process)), 0); #if PLATFORM(COCOA) process->send(Messages::WebProcess::SetQOS(webProcessLatencyQOS(), webProcessThroughputQOS()), 0); #endif if (WebPreferences::anyPagesAreUsingPrivateBrowsing()) process->send(Messages::WebProcess::EnsurePrivateBrowsingSession(SessionID::legacyPrivateSessionID()), 0); m_processes.append(process); if (m_processModel == ProcessModelSharedSecondaryProcess) { for (size_t i = 0; i != m_messagesToInjectedBundlePostedToEmptyContext.size(); ++i) { std::pair<String, RefPtr<API::Object>>& message = m_messagesToInjectedBundlePostedToEmptyContext[i]; IPC::ArgumentEncoder messageData; messageData.encode(message.first); messageData.encode(WebContextUserMessageEncoder(message.second.get(), *process)); process->send(Messages::WebProcess::PostInjectedBundleMessage(IPC::DataReference(messageData.buffer(), messageData.bufferSize())), 0); } m_messagesToInjectedBundlePostedToEmptyContext.clear(); } else ASSERT(m_messagesToInjectedBundlePostedToEmptyContext.isEmpty()); #if ENABLE(REMOTE_INSPECTOR) // Initialize remote inspector connection now that we have a sub-process that is hosting one of our web views. Inspector::RemoteInspector::shared(); #endif return *process; }
void PageState::encode(IPC::ArgumentEncoder& encoder) const { encoder << title; encoder << mainFrameState; encoder.encodeEnum(shouldOpenExternalURLsPolicy); }