void PluginView::performFrameLoadURLRequest(URLRequest* request) { ASSERT(!request->target().isNull()); Frame* frame = m_pluginElement->document()->frame(); if (!frame) return; if (!m_pluginElement->document()->securityOrigin()->canDisplay(request->request().url())) { // We can't load the request, send back a reply to the plug-in. m_plugin->frameDidFail(request->requestID(), false); return; } // First, try to find a target frame. Frame* targetFrame = frame->loader()->findFrameForNavigation(request->target()); if (!targetFrame) { // We did not find a target frame. Ask our frame to load the page. This may or may not create a popup window. frame->loader()->load(request->request(), request->target(), false); // FIXME: We don't know whether the window was successfully created here so we just assume that it worked. // It's better than not telling the plug-in anything. m_plugin->frameDidFinishLoading(request->requestID()); return; } // Now ask the frame to load the request. targetFrame->loader()->load(request->request(), false); WebFrame* targetWebFrame = static_cast<WebFrameLoaderClient*>(targetFrame->loader()->client())->webFrame(); if (WebFrame::LoadListener* loadListener = targetWebFrame->loadListener()) { // Check if another plug-in view or even this view is waiting for the frame to load. // If it is, tell it that the load was cancelled because it will be anyway. loadListener->didFailLoad(targetWebFrame, true); } m_pendingFrameLoads.set(targetWebFrame, request); targetWebFrame->setLoadListener(this); }