mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 08:15:31 +00:00
Bug 1445240 - [1.0] Add element type to onContextMenu callback for image and media elements. r=snorp
This commit is contained in:
parent
bda3ae0619
commit
1f9570b937
@ -899,7 +899,7 @@ public abstract class GeckoApp extends GeckoActivity
|
||||
@Override
|
||||
public void onContextMenu(final GeckoSession session, final int screenX,
|
||||
final int screenY, final String uri,
|
||||
final String elementSrc) {
|
||||
int elementType, final String elementSrc) {
|
||||
}
|
||||
|
||||
protected void setFullScreen(final boolean fullscreen) {
|
||||
|
@ -704,7 +704,8 @@ public class CustomTabsActivity extends AppCompatActivity
|
||||
|
||||
@Override
|
||||
public void onContextMenu(GeckoSession session, int screenX, int screenY,
|
||||
final String uri, final String elementSrc) {
|
||||
final String uri, int elementType,
|
||||
final String elementSrc) {
|
||||
|
||||
final String content = uri != null ? uri : elementSrc != null ? elementSrc : "";
|
||||
final Uri validUri = WebApps.getValidURL(content);
|
||||
|
@ -354,7 +354,7 @@ public class WebAppActivity extends AppCompatActivity
|
||||
|
||||
@Override // GeckoSession.ContentDelegate
|
||||
public void onContextMenu(GeckoSession session, int screenX, int screenY,
|
||||
String uri, String elementSrc) {
|
||||
String uri, int elementType, String elementSrc) {
|
||||
final String content = uri != null ? uri : elementSrc != null ? elementSrc : "";
|
||||
final Uri validUri = WebApps.getValidURL(content);
|
||||
if (validUri == null) {
|
||||
|
@ -136,19 +136,21 @@ class GeckoViewContent extends GeckoViewContentModule {
|
||||
return node && node.href;
|
||||
}
|
||||
|
||||
let node = aEvent.target;
|
||||
let hrefNode = nearestParentHref(node);
|
||||
let isImageNode = (ChromeUtils.getClassName(node) === "HTMLImageElement");
|
||||
let isMediaNode = (ChromeUtils.getClassName(node) === "HTMLVideoElement" ||
|
||||
ChromeUtils.getClassName(node) === "HTMLAudioElement");
|
||||
const node = aEvent.target;
|
||||
const hrefNode = nearestParentHref(node);
|
||||
const elementType = ChromeUtils.getClassName(node);
|
||||
const isImage = elementType === "HTMLImageElement";
|
||||
const isMedia = elementType === "HTMLVideoElement" ||
|
||||
elementType === "HTMLAudioElement";
|
||||
|
||||
if (hrefNode || isImageNode || isMediaNode) {
|
||||
if (hrefNode || isImage || isMedia) {
|
||||
this.eventDispatcher.sendRequest({
|
||||
type: "GeckoView:ContextMenu",
|
||||
screenX: aEvent.screenX,
|
||||
screenY: aEvent.screenY,
|
||||
uri: hrefNode,
|
||||
elementSrc: isImageNode || isMediaNode
|
||||
elementType,
|
||||
elementSrc: (isImage || isMedia)
|
||||
? node.currentSrc || node.src
|
||||
: null
|
||||
});
|
||||
|
@ -108,10 +108,14 @@ public class GeckoSession extends LayerSession
|
||||
final EventCallback callback) {
|
||||
|
||||
if ("GeckoView:ContextMenu".equals(event)) {
|
||||
final int type = getContentElementType(
|
||||
message.getString("elementType"));
|
||||
|
||||
delegate.onContextMenu(GeckoSession.this,
|
||||
message.getInt("screenX"),
|
||||
message.getInt("screenY"),
|
||||
message.getString("uri"),
|
||||
type,
|
||||
message.getString("elementSrc"));
|
||||
} else if ("GeckoView:DOMTitleChanged".equals(event)) {
|
||||
delegate.onTitleChange(GeckoSession.this,
|
||||
@ -1418,7 +1422,23 @@ public class GeckoSession extends LayerSession
|
||||
void onSecurityChange(GeckoSession session, SecurityInformation securityInfo);
|
||||
}
|
||||
|
||||
private static int getContentElementType(final String name) {
|
||||
if ("HTMLImageElement".equals(name)) {
|
||||
return ContentDelegate.ELEMENT_TYPE_IMAGE;
|
||||
} else if ("HTMLVideoElement".equals(name)) {
|
||||
return ContentDelegate.ELEMENT_TYPE_VIDEO;
|
||||
} else if ("HTMLAudioElement".equals(name)) {
|
||||
return ContentDelegate.ELEMENT_TYPE_AUDIO;
|
||||
}
|
||||
return ContentDelegate.ELEMENT_TYPE_NONE;
|
||||
}
|
||||
|
||||
public interface ContentDelegate {
|
||||
static final int ELEMENT_TYPE_NONE = 0;
|
||||
static final int ELEMENT_TYPE_IMAGE = 1;
|
||||
static final int ELEMENT_TYPE_VIDEO = 2;
|
||||
static final int ELEMENT_TYPE_AUDIO = 3;
|
||||
|
||||
/**
|
||||
* A page title was discovered in the content or updated after the content
|
||||
* loaded.
|
||||
@ -1461,11 +1481,13 @@ public class GeckoSession extends LayerSession
|
||||
* @param screenY The screen coordinates of the press.
|
||||
* @param uri The URI of the pressed link, set for links and
|
||||
* image-links.
|
||||
* @param elementType The type of the pressed element.
|
||||
* One of the {@link ContentDelegate#ELEMENT_TYPE_LINK} flags.
|
||||
* @param elementSrc The source URI of the pressed element, set for
|
||||
* (nested) images and media elements.
|
||||
*/
|
||||
void onContextMenu(GeckoSession session, int screenX, int screenY,
|
||||
String uri, String elementSrc);
|
||||
String uri, int elementTypes, String elementSrc);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -190,9 +190,10 @@ public class GeckoViewActivity extends Activity {
|
||||
|
||||
@Override
|
||||
public void onContextMenu(GeckoSession session, int screenX, int screenY,
|
||||
String uri, String elementSrc) {
|
||||
String uri, int elementType, String elementSrc) {
|
||||
Log.d(LOGTAG, "onContextMenu screenX=" + screenX +
|
||||
" screenY=" + screenY + " uri=" + uri +
|
||||
" elementType=" + elementType +
|
||||
" elementSrc=" + elementSrc);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user