116 //TODO: check input element and produce correct respond
117 notImplemented();
118 return DragDestinationActionAny;
119 }
120
121 //We work in window rather than view coordinates here
122 DragSourceAction DragClientJava::dragSourceActionMaskForPoint(const IntPoint&)
123 {
124 //TODO: check input element and produce correct respond
125 notImplemented();
126 return DragSourceActionAny;
127 }
128
129 void DragClientJava::startDrag(
130 DragImage dragImage,
131 const IntPoint& dragImageOrigin,
132 const IntPoint& eventPos,
133 const FloatPoint&,
134 DataTransfer& DataTransfer,
135 Frame&,
136 DragSourceAction)
137 {
138 JNIEnv* env = WebCore_GetJavaEnv();
139 static jmethodID mid = env->GetMethodID(
140 PG_GetWebPageClass(env),
141 "fwkStartDrag", "("
142 "Ljava/lang/Object;"
143 "II"
144 "II"
145 "[Ljava/lang/String;"
146 "[Ljava/lang/Object;"
147 ")V");
148 ASSERT(mid);
149
150 static JGClass clsString(env->FindClass("java/lang/String"));
151 static JGClass clsObject(env->FindClass("java/lang/Object"));
152
153 Vector<String> mimeTypes(DataTransfer.typesPrivate());
154 JLObjectArray jmimeTypes(env->NewObjectArray(mimeTypes.size(), clsString, NULL));
155 JLObjectArray jvalues(env->NewObjectArray(mimeTypes.size(), clsObject, NULL));
156 CheckAndClearException(env); // OOME
157
158 {
159 //we are temporary changing DataTransfer security context
160 //for transfer-to-Java purposes.
161
162 DataTransferAccessPolicy actualJSPolicy = DataTransfer.policy();
163 DataTransfer.setAccessPolicy(DataTransferAccessPolicy::Readable); //XXX DataTransferReadable);
164
165 int index = 0;
166 Vector<String>::const_iterator end = mimeTypes.end();
172
173 env->SetObjectArrayElement(
174 jmimeTypes,
175 index,
176 (jstring)i->toJavaString(env));
177
178 env->SetObjectArrayElement(
179 jvalues,
180 index,
181 (jstring)value.toJavaString(env));
182 }
183
184 DataTransfer.setAccessPolicy(actualJSPolicy);
185 }
186
187 // Attention! [jimage] can be the instance of WCImage or WCImageFrame class.
188 // The nature of raster is too different to make a conversion inside the native code.
189 jobject jimage = dragImage.get() && dragImage.get()->javaImage()
190 ? jobject(*(dragImage.get()->javaImage())) : nullptr;
191
192 env->CallVoidMethod(m_webPage, mid, jimage,
193 eventPos.x() - dragImageOrigin.x(),
194 eventPos.y() - dragImageOrigin.y(),
195 eventPos.x(),
196 eventPos.y(),
197 jobjectArray(jmimeTypes),
198 jobjectArray(jvalues) );
199 CheckAndClearException(env);
200 }
201
202 } // namespace WebCore
|
116 //TODO: check input element and produce correct respond
117 notImplemented();
118 return DragDestinationActionAny;
119 }
120
121 //We work in window rather than view coordinates here
122 DragSourceAction DragClientJava::dragSourceActionMaskForPoint(const IntPoint&)
123 {
124 //TODO: check input element and produce correct respond
125 notImplemented();
126 return DragSourceActionAny;
127 }
128
129 void DragClientJava::startDrag(
130 DragImage dragImage,
131 const IntPoint& dragImageOrigin,
132 const IntPoint& eventPos,
133 const FloatPoint&,
134 DataTransfer& DataTransfer,
135 Frame&,
136 DragSourceAction dragSourceAction)
137 {
138 JNIEnv* env = WebCore_GetJavaEnv();
139 static jmethodID mid = env->GetMethodID(
140 PG_GetWebPageClass(env),
141 "fwkStartDrag", "("
142 "Ljava/lang/Object;"
143 "II"
144 "II"
145 "[Ljava/lang/String;"
146 "[Ljava/lang/Object;"
147 "Z"
148 ")V");
149 ASSERT(mid);
150
151 static JGClass clsString(env->FindClass("java/lang/String"));
152 static JGClass clsObject(env->FindClass("java/lang/Object"));
153
154 Vector<String> mimeTypes(DataTransfer.typesPrivate());
155 JLObjectArray jmimeTypes(env->NewObjectArray(mimeTypes.size(), clsString, NULL));
156 JLObjectArray jvalues(env->NewObjectArray(mimeTypes.size(), clsObject, NULL));
157 CheckAndClearException(env); // OOME
158
159 {
160 //we are temporary changing DataTransfer security context
161 //for transfer-to-Java purposes.
162
163 DataTransferAccessPolicy actualJSPolicy = DataTransfer.policy();
164 DataTransfer.setAccessPolicy(DataTransferAccessPolicy::Readable); //XXX DataTransferReadable);
165
166 int index = 0;
167 Vector<String>::const_iterator end = mimeTypes.end();
173
174 env->SetObjectArrayElement(
175 jmimeTypes,
176 index,
177 (jstring)i->toJavaString(env));
178
179 env->SetObjectArrayElement(
180 jvalues,
181 index,
182 (jstring)value.toJavaString(env));
183 }
184
185 DataTransfer.setAccessPolicy(actualJSPolicy);
186 }
187
188 // Attention! [jimage] can be the instance of WCImage or WCImageFrame class.
189 // The nature of raster is too different to make a conversion inside the native code.
190 jobject jimage = dragImage.get() && dragImage.get()->javaImage()
191 ? jobject(*(dragImage.get()->javaImage())) : nullptr;
192
193 bool isImageSource = dragSourceAction & DragSourceActionImage;
194
195 env->CallVoidMethod(m_webPage, mid, jimage,
196 eventPos.x() - dragImageOrigin.x(),
197 eventPos.y() - dragImageOrigin.y(),
198 eventPos.x(),
199 eventPos.y(),
200 jobjectArray(jmimeTypes),
201 jobjectArray(jvalues),
202 bool_to_jbool(isImageSource));
203 CheckAndClearException(env);
204 }
205
206 } // namespace WebCore
|