--HG--
extra : rebase_source : 586dfca0cf7d9446e532ecfa38fd126225db36b9
This commit is contained in:
Brad Lassey 2012-02-18 18:32:50 -05:00
Родитель e13fac41a5
Коммит 65183064f1
5 изменённых файлов: 84 добавлений и 6 удалений

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

@ -1302,6 +1302,16 @@ abstract public class GeckoApp
Runnable r = new SessionSnapshotRunnable(tab); Runnable r = new SessionSnapshotRunnable(tab);
GeckoAppShell.getHandler().postDelayed(r, 500); GeckoAppShell.getHandler().postDelayed(r, 500);
} }
GeckoAppShell.sendEventToGecko(
GeckoEvent.createMetaViewportQueryEvent(tab.getId(),
new GeckoEvent.Callback() {
public void callback(GeckoEvent ev, String data) {
Log.i(LOGTAG, "Meta Viewport Data:" + data);
// To do: do something with this data
}
})
);
} }
void handleShowToast(final String message, final String duration) { void handleShowToast(final String message, final String duration) {

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

@ -62,6 +62,10 @@ import android.util.Log;
*/ */
public class GeckoEvent { public class GeckoEvent {
public interface Callback {
public void callback(GeckoEvent event, String jsonData);
}
private static final String LOGTAG = "GeckoEvent"; private static final String LOGTAG = "GeckoEvent";
private static final int INVALID = -1; private static final int INVALID = -1;
@ -89,6 +93,7 @@ public class GeckoEvent {
private static final int PROXIMITY_EVENT = 23; private static final int PROXIMITY_EVENT = 23;
private static final int ACTIVITY_RESUMING = 24; private static final int ACTIVITY_RESUMING = 24;
private static final int SCREENSHOT = 25; private static final int SCREENSHOT = 25;
private static final int META_VIEWPORT_QUERY = 26;
public static final int IME_COMPOSITION_END = 0; public static final int IME_COMPOSITION_END = 0;
public static final int IME_COMPOSITION_BEGIN = 1; public static final int IME_COMPOSITION_BEGIN = 1;
@ -136,6 +141,9 @@ public class GeckoEvent {
public boolean mCanBeMetered; public boolean mCanBeMetered;
public int mNativeWindow; public int mNativeWindow;
public int mTabId;
Callback mCallback;
private GeckoEvent(int evType) { private GeckoEvent(int evType) {
mType = evType; mType = evType;
@ -382,6 +390,14 @@ public class GeckoEvent {
return event; return event;
} }
public static GeckoEvent createMetaViewportQueryEvent(int tabId, Callback callback) {
Log.i("GeckoEvent", "createMetaViewportQueryEvent");
GeckoEvent event = new GeckoEvent(META_VIEWPORT_QUERY);
event.mCallback = callback;
event.mTabId = tabId;
return event;
}
public static GeckoEvent createLoadEvent(String uri) { public static GeckoEvent createLoadEvent(String uri) {
GeckoEvent event = new GeckoEvent(LOAD_URI); GeckoEvent event = new GeckoEvent(LOAD_URI);
event.mCharacters = uri; event.mCharacters = uri;
@ -409,4 +425,10 @@ public class GeckoEvent {
event.mMetaState = tabId; event.mMetaState = tabId;
return event; return event;
} }
public void doCallback(String jsonData) {
if (mCallback != null) {
mCallback.callback(this, jsonData);
}
}
} }

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

@ -76,6 +76,8 @@ jfieldID AndroidGeckoEvent::jLocationField = 0;
jfieldID AndroidGeckoEvent::jAddressField = 0; jfieldID AndroidGeckoEvent::jAddressField = 0;
jfieldID AndroidGeckoEvent::jBandwidthField = 0; jfieldID AndroidGeckoEvent::jBandwidthField = 0;
jfieldID AndroidGeckoEvent::jCanBeMeteredField = 0; jfieldID AndroidGeckoEvent::jCanBeMeteredField = 0;
jfieldID AndroidGeckoEvent::jTabIdField = 0;
jmethodID AndroidGeckoEvent::jDoCallbackMethod = 0;
jclass AndroidPoint::jPointClass = 0; jclass AndroidPoint::jPointClass = 0;
jfieldID AndroidPoint::jXField = 0; jfieldID AndroidPoint::jXField = 0;
@ -208,6 +210,9 @@ AndroidGeckoEvent::InitGeckoEventClass(JNIEnv *jEnv)
jAddressField = getField("mAddress", "Landroid/location/Address;"); jAddressField = getField("mAddress", "Landroid/location/Address;");
jBandwidthField = getField("mBandwidth", "D"); jBandwidthField = getField("mBandwidth", "D");
jCanBeMeteredField = getField("mCanBeMetered", "Z"); jCanBeMeteredField = getField("mCanBeMetered", "Z");
jTabIdField = getField("mTabId", "I");
jDoCallbackMethod = getMethod("doCallback", "(Ljava/lang/String;)V");
} }
void void
@ -585,6 +590,10 @@ AndroidGeckoEvent::Init(JNIEnv *jenv, jobject jobj)
break; break;
} }
case META_VIEWPORT_QUERY:
mTabId = jenv->GetIntField(jobj, jTabIdField);
break;
case VIEWPORT: case VIEWPORT:
case BROADCAST: { case BROADCAST: {
ReadCharactersField(jenv); ReadCharactersField(jenv);
@ -616,11 +625,6 @@ AndroidGeckoEvent::Init(JNIEnv *jenv, jobject jobj)
break; break;
} }
case SCREENSHOT: {
mMetaState = jenv->GetIntField(jobj, jMetaStateField);
ReadPointArray(mPoints, jenv, jPoints, 2);
}
default: default:
break; break;
} }
@ -665,6 +669,15 @@ AndroidPoint::Init(JNIEnv *jenv, jobject jobj)
} }
} }
void
AndroidGeckoEvent::DoCallback(const nsAString& data) {
JNIEnv* env = AndroidBridge::GetJNIEnv();
if (!env)
return;
jstring jData = env->NewString(nsPromiseFlatString(data).get(), data.Length());
env->CallVoidMethod(wrapped_obj, jDoCallbackMethod, jData);
}
void void
AndroidGeckoGLLayerClient::Init(jobject jobj) AndroidGeckoGLLayerClient::Init(jobject jobj)
{ {

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

@ -546,6 +546,8 @@ public:
nsGeoPositionAddress* GeoAddress() { return mGeoAddress; } nsGeoPositionAddress* GeoAddress() { return mGeoAddress; }
double Bandwidth() { return mBandwidth; } double Bandwidth() { return mBandwidth; }
bool CanBeMetered() { return mCanBeMetered; } bool CanBeMetered() { return mCanBeMetered; }
int TabId() { return mTabId; }
void DoCallback(const nsAString& data);
protected: protected:
int mAction; int mAction;
@ -571,6 +573,7 @@ protected:
nsRefPtr<nsGeoPositionAddress> mGeoAddress; nsRefPtr<nsGeoPositionAddress> mGeoAddress;
double mBandwidth; double mBandwidth;
bool mCanBeMetered; bool mCanBeMetered;
int mTabId;
void ReadIntArray(nsTArray<int> &aVals, void ReadIntArray(nsTArray<int> &aVals,
JNIEnv *jenv, JNIEnv *jenv,
@ -625,6 +628,9 @@ protected:
static jfieldID jBandwidthField; static jfieldID jBandwidthField;
static jfieldID jCanBeMeteredField; static jfieldID jCanBeMeteredField;
static jfieldID jTabIdField;
static jmethodID jDoCallbackMethod;
public: public:
enum { enum {
@ -653,6 +659,7 @@ public:
PROXIMITY_EVENT = 23, PROXIMITY_EVENT = 23,
ACTIVITY_RESUMING = 24, ACTIVITY_RESUMING = 24,
SCREENSHOT = 25, SCREENSHOT = 25,
META_VIEWPORT_QUERY = 26,
dummy_java_enum_list_end dummy_java_enum_list_end
}; };

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

@ -60,7 +60,7 @@
#include <android/log.h> #include <android/log.h>
#include <pthread.h> #include <pthread.h>
#include <wchar.h> #include <wchar.h>
#include "nsContentUtils.h"
#ifdef MOZ_ANDROID_HISTORY #ifdef MOZ_ANDROID_HISTORY
#include "nsAndroidHistory.h" #include "nsAndroidHistory.h"
#endif #endif
@ -453,6 +453,32 @@ nsAppShell::ProcessNextNativeEvent(bool mayWait)
break; break;
} }
case AndroidGeckoEvent::META_VIEWPORT_QUERY:
{
nsCOMPtr<nsIDOMWindow> domWindow;
mBrowserApp->GetWindowForTab(curEvent->TabId(), getter_AddRefs(domWindow));
if (!domWindow)
break;
nsCOMPtr<nsIDOMDocument> domDocument;
domWindow->GetDocument(getter_AddRefs(domDocument));
nsCOMPtr<nsIDocument> doc = do_QueryInterface(domDocument);
ViewportInfo vi = nsContentUtils::GetViewportInfo(doc);
nsAutoString data;
data.AppendLiteral("{");
data.AppendPrintf("\"defaultZoom\": %f,", vi.defaultZoom);
data.AppendPrintf("\"minZoom\": %f,", vi.minZoom);
data.AppendPrintf("\"maxZoom\": %f,", vi.maxZoom);
data.AppendPrintf("\"width\": %d,", vi.width);
data.AppendPrintf("\"height\": %d,", vi.height);
data.AppendPrintf("\"autoSize\": %s,", vi.autoSize ? "true" : "false");
data.AppendPrintf("\"allowZoom\": %s,", vi.allowZoom ? "true" : "false");
data.AppendPrintf("\"autoScale\": %s", vi.autoScale ? "true" : "false");
data.AppendLiteral("}");
curEvent->DoCallback(data);
}
break;
case AndroidGeckoEvent::VIEWPORT: case AndroidGeckoEvent::VIEWPORT:
case AndroidGeckoEvent::BROADCAST: { case AndroidGeckoEvent::BROADCAST: {