#include "core/dom/RawDataDocumentParser.h"
#include "core/events/EventListener.h"
#include "core/events/MouseEvent.h"
-#include "core/events/ThreadLocalEventNames.h"
#include "core/fetch/ImageResource.h"
+#include "core/frame/FrameView.h"
+#include "core/frame/LocalFrame.h"
+#include "core/frame/Settings.h"
#include "core/html/HTMLBodyElement.h"
#include "core/html/HTMLHeadElement.h"
#include "core/html/HTMLHtmlElement.h"
#include "core/loader/DocumentLoader.h"
#include "core/loader/FrameLoader.h"
#include "core/loader/FrameLoaderClient.h"
-#include "core/frame/Frame.h"
-#include "core/frame/FrameView.h"
-#include "core/page/Page.h"
-#include "core/page/Settings.h"
#include "wtf/text/StringBuilder.h"
using std::min;
{
}
- virtual size_t appendBytes(const char*, size_t) OVERRIDE;
+ virtual void appendBytes(const char*, size_t) OVERRIDE;
virtual void finish();
};
static float pageZoomFactor(const Document* document)
{
- Frame* frame = document->frame();
+ LocalFrame* frame = document->frame();
return frame ? frame->pageZoomFactor() : 1;
}
return result.toString();
}
-size_t ImageDocumentParser::appendBytes(const char* data, size_t length)
+void ImageDocumentParser::appendBytes(const char* data, size_t length)
{
if (!length)
- return 0;
+ return;
- Frame* frame = document()->frame();
+ LocalFrame* frame = document()->frame();
Settings* settings = frame->settings();
- if (!frame->loader().client()->allowImage(!settings || settings->areImagesEnabled(), document()->url()))
- return 0;
+ if (!frame->loader().client()->allowImage(!settings || settings->imagesEnabled(), document()->url()))
+ return;
document()->cachedImage()->appendData(data, length);
+ // Make sure the image renderer gets created because we need the renderer
+ // to read the aspect ratio. See crbug.com/320244
+ document()->updateRenderTreeIfNeeded();
document()->imageUpdated();
- return 0;
}
void ImageDocumentParser::finish()
ImageDocument::ImageDocument(const DocumentInit& initializer)
: HTMLDocument(initializer, ImageDocumentClass)
- , m_imageElement(0)
+ , m_imageElement(nullptr)
, m_imageSizeIsKnown(false)
, m_didShrinkImage(false)
, m_shouldShrinkImage(shouldShrinkToFit())
void ImageDocument::createDocumentStructure()
{
- RefPtr<HTMLHtmlElement> rootElement = HTMLHtmlElement::create(*this);
+ RefPtrWillBeRawPtr<HTMLHtmlElement> rootElement = HTMLHtmlElement::create(*this);
appendChild(rootElement);
rootElement->insertedByParser();
if (frame())
frame()->loader().dispatchDocumentElementAvailable();
- RefPtr<HTMLHeadElement> head = HTMLHeadElement::create(*this);
- RefPtr<HTMLMetaElement> meta = HTMLMetaElement::create(*this);
+ RefPtrWillBeRawPtr<HTMLHeadElement> head = HTMLHeadElement::create(*this);
+ RefPtrWillBeRawPtr<HTMLMetaElement> meta = HTMLMetaElement::create(*this);
meta->setAttribute(nameAttr, "viewport");
- meta->setAttribute(contentAttr, "width=device-width");
+ meta->setAttribute(contentAttr, "width=device-width, minimum-scale=0.1");
head->appendChild(meta);
- RefPtr<HTMLBodyElement> body = HTMLBodyElement::create(*this);
+ RefPtrWillBeRawPtr<HTMLBodyElement> body = HTMLBodyElement::create(*this);
body->setAttribute(styleAttr, "margin: 0px;");
m_imageElement = HTMLImageElement::create(*this);
LayoutSize imageSize = m_imageElement->cachedImage()->imageSizeForRenderer(m_imageElement->renderer(), pageZoomFactor(this));
LayoutSize windowSize = LayoutSize(view->width(), view->height());
- float widthScale = (float)windowSize.width() / imageSize.width();
- float heightScale = (float)windowSize.height() / imageSize.height();
+ float widthScale = windowSize.width().toFloat() / imageSize.width().toFloat();
+ float heightScale = windowSize.height().toFloat() / imageSize.height().toFloat();
return min(widthScale, heightScale);
}
bool ImageDocument::shouldShrinkToFit() const
{
- return frame()->settings()->shrinksStandaloneImagesToFit() && frame()->page()->mainFrame() == frame();
+ return frame()->settings()->shrinksStandaloneImagesToFit() && frame()->isMainFrame();
}
void ImageDocument::dispose()
{
- m_imageElement = 0;
+ m_imageElement = nullptr;
HTMLDocument::dispose();
}
+void ImageDocument::trace(Visitor* visitor)
+{
+ visitor->trace(m_imageElement);
+ HTMLDocument::trace(visitor);
+}
+
// --------
void ImageEventListener::handleEvent(ExecutionContext*, Event* event)