Bug 694637 - [birch] Add basic DOMTitleChanged and DOMLinkAdded support r=bnicholson

This commit is contained in:
Mark Finkle 2011-10-14 16:07:17 -04:00
Родитель a6d04b926d
Коммит 8bd5538b73
4 изменённых файлов: 85 добавлений и 13 удалений

Просмотреть файл

@ -89,6 +89,7 @@ abstract public class GeckoApp
private IntentFilter mConnectivityFilter;
private BroadcastReceiver mConnectivityReceiver;
public static Button mAwesomeBar;
public static ImageButton mFavicon;
public static ProgressBar mProgressBar;
private SessionHistory mSessionHistory;
@ -470,6 +471,8 @@ abstract public class GeckoApp
}
});
mFavicon = (ImageButton) findViewById(R.id.favimage);
ImageButton reload = (ImageButton) findViewById(R.id.reload);
reload.setOnClickListener(new ImageButton.OnClickListener() {
public void onClick(View v) {

Просмотреть файл

@ -45,6 +45,8 @@ import java.text.*;
import java.util.*;
import java.util.zip.*;
import java.util.concurrent.*;
import java.net.MalformedURLException;
import java.net.URL;
import android.os.*;
import android.app.*;
@ -1614,6 +1616,35 @@ public class GeckoAppShell
}
});
Log.i("GeckoShell", "URI - " + uri + ", title - " + title);
} else if (type.equals("DOMTitleChanged")) {
final String title = geckoObject.getString("title");
final CharSequence titleText = title;
getMainHandler().post(new Runnable() {
public void run() {
GeckoApp.mAwesomeBar.setText(titleText);
}
});
Log.i("GeckoShell", "title - " + title);
} else if (type.equals("DOMLinkAdded")) {
final String rel = geckoObject.getString("rel");
final String href = geckoObject.getString("href");
Log.i("GeckoShell", "link rel - " + rel + ", href - " + href);
if (rel.indexOf("icon") != -1) {
getMainHandler().post(new Runnable() {
public void run() {
try {
URL url = new URL(href);
InputStream is = (InputStream) url.getContent();
Drawable image = Drawable.createFromStream(is, "src");
GeckoApp.mFavicon.setImageDrawable(image);
} catch (MalformedURLException e) {
Log.d("GeckoShell", "Error loading favicon: " + e);
} catch (IOException e) {
Log.d("GeckoShell", "Error loading favicon: " + e);
}
}
});
}
} else if (type.equals("log")) {
// generic log listener
final String msg = geckoObject.getString("msg");

Просмотреть файл

@ -12,7 +12,7 @@
<LinearLayout android:id="@+android:id/addressBar"
style="@style/AddressBar">
<ImageButton android:id="@+android:id/favicon"
<ImageButton android:id="@+android:id/favimage"
style="@style/AddressBar.ImageButton.Left"
android:src="@drawable/favicon"/>

Просмотреть файл

@ -226,19 +226,19 @@ Tab.prototype = {
},
onLocationChange: function(aWebProgress, aRequest, aLocationURI) {
let browser = BrowserApp.getBrowserForWindow(aWebProgress.DOMWindow);
let uri = browser.currentURI.spec;
let windowID = aWebProgress.DOMWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils).currentInnerWindowID;
let message = {
gecko: {
type: "onLocationChange",
windowID: windowID,
uri: uri
}
};
let browser = BrowserApp.getBrowserForWindow(aWebProgress.DOMWindow);
let uri = browser.currentURI.spec;
let windowID = aWebProgress.DOMWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils).currentInnerWindowID;
sendMessageToJava(message);
let message = {
gecko: {
type: "onLocationChange",
windowID: windowID,
uri: uri
}
};
sendMessageToJava(message);
},
onSecurityChange: function(aBrowser, aWebProgress, aRequest, aState) {
@ -279,6 +279,8 @@ var BrowserEventHandler = {
BrowserApp.deck.addEventListener("MozMagnifyGestureStart", this, true);
BrowserApp.deck.addEventListener("MozMagnifyGestureUpdate", this, true);
BrowserApp.deck.addEventListener("DOMContentLoaded", this, true);
BrowserApp.deck.addEventListener("DOMLinkAdded", this, true);
BrowserApp.deck.addEventListener("DOMTitleChanged", this, true);
},
handleEvent: function(aEvent) {
@ -300,6 +302,37 @@ var BrowserEventHandler = {
});
break;
}
case "DOMLinkAdded":
let target = aEvent.originalTarget;
if (!target.href || target.disabled)
return;
let json = {
type: "DOMLinkAdded",
windowId: target.ownerDocument.defaultView.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils).currentInnerWindowID,
href: target.href,
charset: target.ownerDocument.characterSet,
title: target.title,
rel: target.rel
};
// rel=icon can also have a sizes attribute
if (target.hasAttribute("sizes"))
json.sizes = target.getAttribute("sizes");
sendMessageToJava({ gecko: json });
break;
case "DOMTitleChanged":
sendMessageToJava({
gecko: {
type: "DOMTitleChanged",
title: aEvent.target.title
}
});
break;
case "click":
if (this.blockClick) {
aEvent.stopPropagation();
@ -307,6 +340,7 @@ var BrowserEventHandler = {
}
break;
case "mousedown":
this.startX = aEvent.clientX;
this.startY = aEvent.clientY;
@ -322,6 +356,7 @@ var BrowserEventHandler = {
aEvent.stopPropagation();
aEvent.preventDefault();
break;
case "mousemove":
let dx = aEvent.clientX - this.lastX;
let dy = aEvent.clientY - this.lastY;
@ -332,6 +367,7 @@ var BrowserEventHandler = {
aEvent.stopPropagation();
aEvent.preventDefault();
break;
case "mouseup":
this.panning = false;
let isDrag = (Math.abs(aEvent.clientX - this.startX) > 10 ||
@ -432,9 +468,11 @@ var BrowserEventHandler = {
aEvent.stopPropagation();
aEvent.preventDefault();
break;
case "MozMagnifyGestureStart":
this._pinchDelta = 0;
break;
case "MozMagnifyGestureUpdate":
if (!aEvent.delta)
break;