ContextMenuContextData.cpp [plain text]
#include "config.h"
#include "ContextMenuContextData.h"
#if ENABLE(CONTEXT_MENUS)
#include "WebCoreArgumentCoders.h"
#include <WebCore/ContextMenuContext.h>
#include <WebCore/GraphicsContext.h>
using namespace WebCore;
namespace WebKit {
ContextMenuContextData::ContextMenuContextData()
: m_isTelephoneNumberContext(false)
#if ENABLE(SERVICE_CONTROLS)
, m_selectionIsEditable(false)
#endif
{
}
ContextMenuContextData::ContextMenuContextData(TelephoneNumberContextTag)
: m_isTelephoneNumberContext(true)
#if ENABLE(SERVICE_CONTROLS)
, m_selectionIsEditable(false)
#endif
{
}
ContextMenuContextData::ContextMenuContextData(const ContextMenuContext& context)
: m_webHitTestResultData(WebHitTestResult::Data(context.hitTestResult()))
, m_isTelephoneNumberContext(false)
#if ENABLE(SERVICE_CONTROLS)
, m_selectionIsEditable(false)
#endif
{
#if ENABLE(SERVICE_CONTROLS)
Image* image = context.controlledImage();
if (!image)
return;
RefPtr<ShareableBitmap> bitmap = ShareableBitmap::createShareable(IntSize(image->size()), ShareableBitmap::SupportsAlpha);
bitmap->createGraphicsContext()->drawImage(image, ColorSpaceDeviceRGB, IntPoint());
bitmap->createHandle(m_controlledImageHandle);
#endif
}
ContextMenuContextData::ContextMenuContextData(const ContextMenuContextData& other)
{
*this = other;
}
ContextMenuContextData& ContextMenuContextData::operator=(const ContextMenuContextData& other)
{
m_webHitTestResultData = other.m_webHitTestResultData;
m_isTelephoneNumberContext = other.m_isTelephoneNumberContext;
#if ENABLE(SERVICE_CONTROLS)
m_controlledImageHandle.clear();
if (!other.m_controlledImageHandle.isNull()) {
RefPtr<ShareableBitmap> bitmap = ShareableBitmap::create(other.m_controlledImageHandle);
bitmap->createHandle(m_controlledImageHandle);
}
m_selectionIsEditable = other.m_selectionIsEditable;
#endif
return *this;
}
void ContextMenuContextData::encode(IPC::ArgumentEncoder& encoder) const
{
encoder << m_webHitTestResultData;
#if ENABLE(TELEPHONE_NUMBER_DETECTION)
encoder << m_isTelephoneNumberContext;
#endif
#if ENABLE(SERVICE_CONTROLS)
encoder << m_controlledImageHandle;
#endif
}
bool ContextMenuContextData::decode(IPC::ArgumentDecoder& decoder, ContextMenuContextData& contextMenuContextData)
{
if (!decoder.decode(contextMenuContextData.m_webHitTestResultData))
return false;
#if ENABLE(TELEPHONE_NUMBER_DETECTION)
if (!decoder.decode(contextMenuContextData.m_isTelephoneNumberContext))
return false;
#endif
#if ENABLE(SERVICE_CONTROLS)
if (!decoder.decode(contextMenuContextData.m_controlledImageHandle))
return false;
#endif
return true;
}
#if ENABLE(SERVICE_CONTROLS)
bool ContextMenuContextData::controlledDataIsEditable() const
{
if (!m_controlledSelectionData.isEmpty())
return m_selectionIsEditable;
if (!m_controlledImageHandle.isNull())
return m_webHitTestResultData.isContentEditable;
return false;
}
#endif
}
#endif // ENABLE(CONTEXT_MENUS)