cef/libcef/browser/context_menu_params_impl.cc
Marshall Greenblatt dc3aae19e8 Add plugin placeholder and policy support (issue #1708)
- Default plugin loading policy can be specified using the new
  `--plugin-policy=[allow|block|detect]` command-line flag.
- Move CefRequestHandler::OnBeforePluginLoad to
  CefRequestContextHandler and add a new policy argument that
  supports different actions (allow, block, detect, disable) on a
  per-plugin-instance basis.
- Add CefContextMenuHandler::RunContextMenu for providing a custom
  context menu implementation.
- Add CefResourceBundleHandler::GetDataResourceForScale for
  returning scaled resources (issue #1272).
- Add CefResourceBundle for retrieving resources from the resource
  bundle (*.pak) files loaded by CEF during startup or via the
  CefResourceBundleHandler.
- Linux: Fix Debug build IO access warning with CefGetMimeType.
- cef_unittests: Move the refcounting implementation from TestHandler
  to subclasses in order to support interface inheritance from
  subclasses.
2015-09-22 12:28:46 +03:00

146 lines
4.4 KiB
C++

// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
// reserved. Use of this source code is governed by a BSD-style license that
// can be found in the LICENSE file.
#include "libcef/browser/context_menu_params_impl.h"
#include "base/logging.h"
CefContextMenuParamsImpl::CefContextMenuParamsImpl(
content::ContextMenuParams* value)
: CefValueBase<CefContextMenuParams, content::ContextMenuParams>(
value, NULL, kOwnerNoDelete, true,
new CefValueControllerNonThreadSafe()) {
// Indicate that this object owns the controller.
SetOwnsController();
}
int CefContextMenuParamsImpl::GetXCoord() {
CEF_VALUE_VERIFY_RETURN(false, 0);
return const_value().x;
}
int CefContextMenuParamsImpl::GetYCoord() {
CEF_VALUE_VERIFY_RETURN(false, 0);
return const_value().y;
}
CefContextMenuParamsImpl::TypeFlags CefContextMenuParamsImpl::GetTypeFlags() {
CEF_VALUE_VERIFY_RETURN(false, CM_TYPEFLAG_NONE);
const content::ContextMenuParams& params = const_value();
int type_flags = CM_TYPEFLAG_NONE;
if (!params.page_url.is_empty())
type_flags |= CM_TYPEFLAG_PAGE;
if (!params.frame_url.is_empty())
type_flags |= CM_TYPEFLAG_FRAME;
if (!params.link_url.is_empty())
type_flags |= CM_TYPEFLAG_LINK;
if (params.media_type != blink::WebContextMenuData::MediaTypeNone)
type_flags |= CM_TYPEFLAG_MEDIA;
if (!params.selection_text.empty())
type_flags |= CM_TYPEFLAG_SELECTION;
if (params.is_editable)
type_flags |= CM_TYPEFLAG_EDITABLE;
return static_cast<TypeFlags>(type_flags);
}
CefString CefContextMenuParamsImpl::GetLinkUrl() {
CEF_VALUE_VERIFY_RETURN(false, CefString());
return const_value().link_url.spec();
}
CefString CefContextMenuParamsImpl::GetUnfilteredLinkUrl() {
CEF_VALUE_VERIFY_RETURN(false, CefString());
return const_value().unfiltered_link_url.spec();
}
CefString CefContextMenuParamsImpl::GetSourceUrl() {
CEF_VALUE_VERIFY_RETURN(false, CefString());
return const_value().src_url.spec();
}
bool CefContextMenuParamsImpl::HasImageContents() {
CEF_VALUE_VERIFY_RETURN(false, true);
return const_value().has_image_contents;
}
CefString CefContextMenuParamsImpl::GetPageUrl() {
CEF_VALUE_VERIFY_RETURN(false, CefString());
return const_value().page_url.spec();
}
CefString CefContextMenuParamsImpl::GetFrameUrl() {
CEF_VALUE_VERIFY_RETURN(false, CefString());
return const_value().frame_url.spec();
}
CefString CefContextMenuParamsImpl::GetFrameCharset() {
CEF_VALUE_VERIFY_RETURN(false, CefString());
return const_value().frame_charset;
}
CefContextMenuParamsImpl::MediaType CefContextMenuParamsImpl::GetMediaType() {
CEF_VALUE_VERIFY_RETURN(false, CM_MEDIATYPE_NONE);
return static_cast<MediaType>(const_value().media_type);
}
CefContextMenuParamsImpl::MediaStateFlags
CefContextMenuParamsImpl::GetMediaStateFlags() {
CEF_VALUE_VERIFY_RETURN(false, CM_MEDIAFLAG_NONE);
return static_cast<MediaStateFlags>(const_value().media_flags);
}
CefString CefContextMenuParamsImpl::GetSelectionText() {
CEF_VALUE_VERIFY_RETURN(false, CefString());
return const_value().selection_text;
}
CefString CefContextMenuParamsImpl::GetMisspelledWord() {
CEF_VALUE_VERIFY_RETURN(false, CefString());
return const_value().misspelled_word;
}
bool CefContextMenuParamsImpl::GetDictionarySuggestions(
std::vector<CefString>& suggestions) {
CEF_VALUE_VERIFY_RETURN(false, false);
if (!suggestions.empty())
suggestions.clear();
if(const_value().dictionary_suggestions.empty())
return false;
std::vector<base::string16>::const_iterator it =
const_value().dictionary_suggestions.begin();
for (; it != const_value().dictionary_suggestions.end(); ++it)
suggestions.push_back(*it);
return true;
}
bool CefContextMenuParamsImpl::IsEditable() {
CEF_VALUE_VERIFY_RETURN(false, false);
return const_value().is_editable;
}
bool CefContextMenuParamsImpl::IsSpellCheckEnabled() {
CEF_VALUE_VERIFY_RETURN(false, false);
return const_value().spellcheck_enabled;
}
CefContextMenuParamsImpl::EditStateFlags
CefContextMenuParamsImpl::GetEditStateFlags() {
CEF_VALUE_VERIFY_RETURN(false, CM_EDITFLAG_NONE);
return static_cast<EditStateFlags>(const_value().edit_flags);
}
bool CefContextMenuParamsImpl::IsCustomMenu() {
CEF_VALUE_VERIFY_RETURN(false, false);
return !const_value().custom_items.empty();
}
bool CefContextMenuParamsImpl::IsPepperMenu() {
CEF_VALUE_VERIFY_RETURN(false, false);
return const_value().custom_context.is_pepper_menu;
}