Files
palemoon27/dom/base/nsGenConImageContent.cpp
T
roytam1 b372a2634f import change from rmottola/Arctic-Fox:
- Bug 1087646 - Properly serialize nullprincipal URIs across IPC. (1fcc5a63e)
- bug 1137538 - remove nsIIdentityInfo and nsNSSSocketInfo::GetPreviousCert Bug 1136471 - Remove unused nsIIdentityInfo.getValidEVPolicyOid(). (f23ed7a6f)
- Bug 1049476 - 0001. webidl change - Support user certificate parameter (ba92ac3c6)
- Bug 1049476 - 0002. Support user certificate parameter in API. (30ec1a9c8)
- Bug 1049476 - 0003. Add EAP-TLS to wifi capabilities. (69920f968)
- Bug 1130400. Part 1. Pass the passed in anchor frame to SetPopupPosition in nsMenuPopupFrame::LayoutPopup if we have one. r=enndeakin (2de244c51)
- Bug 1130400. Part 2. Use a reflow callback to set the position of xul popups. r=enndeakin (aa2117085)
- Bug 1130400. Add test. (9047c9013)
- Bug 1043143: Step 2a: Add a class like nsDownloader but using memory instead of a file. (fad673f10)
- Bug 1034143: Step 2b: Add the ability to read jar files from arbitrary memory. (e1dc9faa6)
- Bug 1034143: Step 1: Fix tests for bug 945152 and bug 1008126. r=smaug (e6b6cc408)
- Bug 1043143: Step 3: Convert nsJARChannel from temporary files to temporary memory. r=honzab (79e381e50)
- Bug 1145631 - Part 1: Replace MOZ_OVERRIDE and MOZ_FINAL with override and final in the tree; r=froydnj (f21f630cb)
- Bug 1148527 - Indentation fix after bug 1145631 (a8153b9c5)
2019-06-25 10:33:09 +08:00

132 lines
4.1 KiB
C++

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/**
* A fake content node class so that the image frame for
* content: url(foo);
* in CSS can have an nsIImageLoadingContent but use an
* imgIRequest that's already been loaded from the style system.
*/
#include "nsContentCreatorFunctions.h"
#include "nsXMLElement.h"
#include "nsImageLoadingContent.h"
#include "imgIRequest.h"
#include "mozilla/BasicEvents.h"
#include "mozilla/EventDispatcher.h"
#include "mozilla/EventStates.h"
using namespace mozilla;
class nsGenConImageContent final : public nsXMLElement,
public nsImageLoadingContent
{
public:
explicit nsGenConImageContent(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
: nsXMLElement(aNodeInfo)
{
// nsImageLoadingContent starts out broken, so we start out
// suppressed to match it.
AddStatesSilently(NS_EVENT_STATE_SUPPRESSED);
}
nsresult Init(imgRequestProxy* aImageRequest)
{
// No need to notify, since we have no frame.
return UseAsPrimaryRequest(aImageRequest, false, eImageLoadType_Normal);
}
// nsIContent overrides
virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
nsIContent* aBindingParent,
bool aCompileEventHandlers) override;
virtual void UnbindFromTree(bool aDeep, bool aNullParent) override;
virtual EventStates IntrinsicState() const override;
virtual nsresult PreHandleEvent(EventChainPreVisitor& aVisitor) override
{
MOZ_ASSERT(IsInNativeAnonymousSubtree());
if (aVisitor.mEvent->message == NS_LOAD ||
aVisitor.mEvent->message == NS_LOAD_ERROR) {
// Don't propagate the events to the parent.
return NS_OK;
}
return nsXMLElement::PreHandleEvent(aVisitor);
}
protected:
nsIContent* AsContent() override { return this; }
private:
virtual ~nsGenConImageContent();
public:
NS_DECL_ISUPPORTS_INHERITED
};
NS_IMPL_ISUPPORTS_INHERITED(nsGenConImageContent,
nsXMLElement,
nsIImageLoadingContent,
imgINotificationObserver,
imgIOnloadBlocker)
nsresult
NS_NewGenConImageContent(nsIContent** aResult, already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo,
imgRequestProxy* aImageRequest)
{
NS_PRECONDITION(aImageRequest, "Must have request!");
nsGenConImageContent *it = new nsGenConImageContent(aNodeInfo);
if (!it)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(*aResult = it);
nsresult rv = it->Init(aImageRequest);
if (NS_FAILED(rv))
NS_RELEASE(*aResult);
return rv;
}
nsGenConImageContent::~nsGenConImageContent()
{
DestroyImageLoadingContent();
}
nsresult
nsGenConImageContent::BindToTree(nsIDocument* aDocument, nsIContent* aParent,
nsIContent* aBindingParent,
bool aCompileEventHandlers)
{
nsresult rv;
rv = nsXMLElement::BindToTree(aDocument, aParent, aBindingParent,
aCompileEventHandlers);
NS_ENSURE_SUCCESS(rv, rv);
nsImageLoadingContent::BindToTree(aDocument, aParent, aBindingParent,
aCompileEventHandlers);
return NS_OK;
}
void
nsGenConImageContent::UnbindFromTree(bool aDeep, bool aNullParent)
{
nsImageLoadingContent::UnbindFromTree(aDeep, aNullParent);
nsXMLElement::UnbindFromTree(aDeep, aNullParent);
}
EventStates
nsGenConImageContent::IntrinsicState() const
{
EventStates state = nsXMLElement::IntrinsicState();
EventStates imageState = nsImageLoadingContent::ImageState();
if (imageState.HasAtLeastOneOfStates(NS_EVENT_STATE_BROKEN | NS_EVENT_STATE_USERDISABLED)) {
// We should never be in an error state; if the image fails to load, we
// just go to the suppressed state.
imageState |= NS_EVENT_STATE_SUPPRESSED;
imageState &= ~NS_EVENT_STATE_BROKEN;
}
imageState &= ~NS_EVENT_STATE_LOADING;
return state | imageState;
}