summaryrefslogtreecommitdiffstats
path: root/WebKit/gtk/webkit/webkitwebview.cpp
diff options
context:
space:
mode:
authorKristian Monsen <kristianm@google.com>2010-05-21 16:53:46 +0100
committerKristian Monsen <kristianm@google.com>2010-05-25 10:24:15 +0100
commit6c2af9490927c3c5959b5cb07461b646f8b32f6c (patch)
treef7111b9b22befab472616c1d50ec94eb50f1ec8c /WebKit/gtk/webkit/webkitwebview.cpp
parenta149172322a9067c14e8b474a53e63649aa17cad (diff)
downloadexternal_webkit-6c2af9490927c3c5959b5cb07461b646f8b32f6c.zip
external_webkit-6c2af9490927c3c5959b5cb07461b646f8b32f6c.tar.gz
external_webkit-6c2af9490927c3c5959b5cb07461b646f8b32f6c.tar.bz2
Merge WebKit at r59636: Initial merge by git
Change-Id: I59b289c4e6b18425f06ce41cc9d34c522515de91
Diffstat (limited to 'WebKit/gtk/webkit/webkitwebview.cpp')
-rw-r--r--WebKit/gtk/webkit/webkitwebview.cpp183
1 files changed, 62 insertions, 121 deletions
diff --git a/WebKit/gtk/webkit/webkitwebview.cpp b/WebKit/gtk/webkit/webkitwebview.cpp
index 10a082c..ca72665 100644
--- a/WebKit/gtk/webkit/webkitwebview.cpp
+++ b/WebKit/gtk/webkit/webkitwebview.cpp
@@ -204,9 +204,7 @@ static void destroy_menu_cb(GtkObject* object, gpointer data)
{
WebKitWebView* webView = WEBKIT_WEB_VIEW(data);
WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
-
- g_object_unref(priv->currentMenu);
- priv->currentMenu = NULL;
+ priv->currentMenu = 0;
}
static void PopupMenuPositionFunc(GtkMenu* menu, gint *x, gint *y, gboolean *pushIn, gpointer userData)
@@ -296,7 +294,7 @@ static gboolean webkit_web_view_forward_context_menu_event(WebKitWebView* webVie
return FALSE;
WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
- priv->currentMenu = GTK_MENU(g_object_ref(menu));
+ priv->currentMenu = menu;
priv->lastPopupXPosition = event.globalX();
priv->lastPopupYPosition = event.globalY();
@@ -570,7 +568,7 @@ static gboolean webkit_web_view_key_release_event(GtkWidget* widget, GdkEventKey
// the event if we don't have a pending composition, because that means we
// are using a context like 'simple' which marks every keystroke as filtered.
WebKit::EditorClient* client = static_cast<WebKit::EditorClient*>(core(webView)->editorClient());
- if (gtk_im_context_filter_keypress(webView->priv->imContext, event) && !client->hasPendingComposition())
+ if (gtk_im_context_filter_keypress(webView->priv->imContext.get(), event) && !client->hasPendingComposition())
return TRUE;
Frame* frame = core(webView)->focusController()->focusedOrMainFrame();
@@ -627,7 +625,7 @@ static gboolean webkit_web_view_button_release_event(GtkWidget* widget, GdkEvent
if (focusedFrame && focusedFrame->editor()->canEdit()) {
#ifdef MAEMO_CHANGES
WebKitWebViewPrivate* priv = webView->priv;
- hildon_gtk_im_context_filter_event(priv->imContext, (GdkEvent*)event);
+ hildon_gtk_im_context_filter_event(priv->imContext.get(), (GdkEvent*)event);
#endif
}
@@ -730,7 +728,7 @@ static gboolean webkit_web_view_focus_in_event(GtkWidget* widget, GdkEventFocus*
else
focusController->setFocusedFrame(core(webView)->mainFrame());
- gtk_im_context_focus_in(webView->priv->imContext);
+ gtk_im_context_focus_in(webView->priv->imContext.get());
}
return GTK_WIDGET_CLASS(webkit_web_view_parent_class)->focus_in_event(widget, event);
}
@@ -748,7 +746,7 @@ static gboolean webkit_web_view_focus_out_event(GtkWidget* widget, GdkEventFocus
}
if (webView->priv->imContext)
- gtk_im_context_focus_out(webView->priv->imContext);
+ gtk_im_context_focus_out(webView->priv->imContext.get());
return GTK_WIDGET_CLASS(webkit_web_view_parent_class)->focus_out_event(widget, event);
}
@@ -787,7 +785,7 @@ static void webkit_web_view_realize(GtkWidget* widget)
WebKitWebView* webView = WEBKIT_WEB_VIEW(widget);
WebKitWebViewPrivate* priv = webView->priv;
- gtk_im_context_set_client_window(priv->imContext, widget->window);
+ gtk_im_context_set_client_window(priv->imContext.get(), widget->window);
}
static void webkit_web_view_set_scroll_adjustments(WebKitWebView* webView, GtkAdjustment* hadj, GtkAdjustment* vadj)
@@ -796,19 +794,7 @@ static void webkit_web_view_set_scroll_adjustments(WebKitWebView* webView, GtkAd
return;
FrameView* view = core(webkit_web_view_get_main_frame(webView))->view();
-
- if (hadj)
- g_object_ref(hadj);
- if (vadj)
- g_object_ref(vadj);
-
WebKitWebViewPrivate* priv = webView->priv;
-
- if (priv->horizontalAdjustment)
- g_object_unref(priv->horizontalAdjustment);
- if (priv->verticalAdjustment)
- g_object_unref(priv->verticalAdjustment);
-
priv->horizontalAdjustment = hadj;
priv->verticalAdjustment = vadj;
@@ -1076,21 +1062,6 @@ static void webkit_web_view_dispose(GObject* object)
priv->disposing = TRUE;
- if (priv->horizontalAdjustment) {
- g_object_unref(priv->horizontalAdjustment);
- priv->horizontalAdjustment = NULL;
- }
-
- if (priv->verticalAdjustment) {
- g_object_unref(priv->verticalAdjustment);
- priv->verticalAdjustment = NULL;
- }
-
- if (priv->backForwardList) {
- g_object_unref(priv->backForwardList);
- priv->backForwardList = NULL;
- }
-
if (priv->corePage) {
webkit_web_view_stop_loading(WEBKIT_WEB_VIEW(object));
@@ -1100,30 +1071,18 @@ static void webkit_web_view_dispose(GObject* object)
}
if (priv->webSettings) {
- g_signal_handlers_disconnect_by_func(priv->webSettings, (gpointer)webkit_web_view_settings_notify, webView);
- g_object_unref(priv->webSettings);
- priv->webSettings = NULL;
-
- g_object_unref(priv->webInspector);
- priv->webInspector = NULL;
-
- g_object_unref(priv->webWindowFeatures);
- priv->webWindowFeatures = NULL;
-
- g_object_unref(priv->imContext);
- priv->imContext = NULL;
- }
-
- if (priv->mainResource) {
- g_object_unref(priv->mainResource);
- priv->mainResource = NULL;
- }
-
- if (priv->subResources) {
- g_hash_table_unref(priv->subResources);
- priv->subResources = NULL;
+ g_signal_handlers_disconnect_by_func(priv->webSettings.get(), (gpointer)webkit_web_view_settings_notify, webView);
+ priv->webSettings.clear();
}
+ priv->horizontalAdjustment.clear();
+ priv->verticalAdjustment.clear();
+ priv->backForwardList.clear();
+ priv->webInspector.clear();
+ priv->webWindowFeatures.clear();
+ priv->imContext.clear();
+ priv->mainResource.clear();
+ priv->subResources.clear();
priv->draggingDataObjects.clear();
G_OBJECT_CLASS(webkit_web_view_parent_class)->dispose(object);
@@ -1134,11 +1093,11 @@ static void webkit_web_view_finalize(GObject* object)
WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
WebKitWebViewPrivate* priv = webView->priv;
- g_free(priv->tooltipText);
- g_free(priv->mainResourceIdentifier);
- g_free(priv->encoding);
- g_free(priv->customEncoding);
- g_free(priv->iconURI);
+ priv->tooltipText.clear();
+ priv->mainResourceIdentifier.clear();
+ priv->encoding.clear();
+ priv->customEncoding.clear();
+ priv->iconURI.clear();
G_OBJECT_CLASS(webkit_web_view_parent_class)->finalize(object);
}
@@ -1189,7 +1148,7 @@ static AtkObject* webkit_web_view_get_accessible(GtkWidget* widget)
static gdouble webViewGetDPI(WebKitWebView* webView)
{
WebKitWebViewPrivate* priv = webView->priv;
- WebKitWebSettings* webSettings = priv->webSettings;
+ WebKitWebSettings* webSettings = priv->webSettings.get();
gboolean enforce96DPI;
g_object_get(webSettings, "enforce-96-dpi", &enforce96DPI, NULL);
if (enforce96DPI)
@@ -1215,7 +1174,7 @@ static void webkit_web_view_screen_changed(GtkWidget* widget, GdkScreen* previou
if (priv->disposing)
return;
- WebKitWebSettings* webSettings = priv->webSettings;
+ WebKitWebSettings* webSettings = priv->webSettings.get();
Settings* settings = core(webView)->settings();
gdouble DPI = webViewGetDPI(webView);
@@ -1264,7 +1223,7 @@ static gboolean webkit_web_view_query_tooltip(GtkWidget *widget, gint x, gint y,
WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(widget);
if (priv->tooltipText) {
- gtk_tooltip_set_text(tooltip, priv->tooltipText);
+ gtk_tooltip_set_text(tooltip, priv->tooltipText.get());
return TRUE;
}
@@ -1275,7 +1234,7 @@ static gboolean webkit_web_view_query_tooltip(GtkWidget *widget, gint x, gint y,
static GtkIMContext* webkit_web_view_get_im_context(WebKitWebView* webView)
{
g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
- return GTK_IM_CONTEXT(webView->priv->imContext);
+ return GTK_IM_CONTEXT(webView->priv->imContext.get());
}
static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
@@ -2591,7 +2550,7 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
static void webkit_web_view_update_settings(WebKitWebView* webView)
{
WebKitWebViewPrivate* priv = webView->priv;
- WebKitWebSettings* webSettings = priv->webSettings;
+ WebKitWebSettings* webSettings = priv->webSettings.get();
Settings* settings = core(webView)->settings();
gchar* defaultEncoding, *cursiveFontFamily, *defaultFontFamily, *fantasyFontFamily, *monospaceFontFamily, *sansSerifFontFamily, *serifFontFamily, *userStylesheetUri;
@@ -2795,40 +2754,36 @@ static void webkit_web_view_init(WebKitWebView* webView)
WebKitWebViewPrivate* priv = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
webView->priv = priv;
- priv->imContext = gtk_im_multicontext_new();
+ priv->imContext = adoptGRef(gtk_im_multicontext_new());
WebKit::InspectorClient* inspectorClient = new WebKit::InspectorClient(webView);
priv->corePage = new Page(new WebKit::ChromeClient(webView), new WebKit::ContextMenuClient(webView), new WebKit::EditorClient(webView), new WebKit::DragClient(webView), inspectorClient, 0, 0);
// We also add a simple wrapper class to provide the public
// interface for the Web Inspector.
- priv->webInspector = WEBKIT_WEB_INSPECTOR(g_object_new(WEBKIT_TYPE_WEB_INSPECTOR, NULL));
- webkit_web_inspector_set_inspector_client(priv->webInspector, priv->corePage);
+ priv->webInspector = adoptGRef(WEBKIT_WEB_INSPECTOR(g_object_new(WEBKIT_TYPE_WEB_INSPECTOR, NULL)));
+ webkit_web_inspector_set_inspector_client(priv->webInspector.get(), priv->corePage);
+ // These are create with floating references, so they should not be wrapped in adoptGref.
priv->horizontalAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
priv->verticalAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
- g_object_ref_sink(priv->horizontalAdjustment);
- g_object_ref_sink(priv->verticalAdjustment);
-
GTK_WIDGET_SET_FLAGS(webView, GTK_CAN_FOCUS);
priv->mainFrame = WEBKIT_WEB_FRAME(webkit_web_frame_new(webView));
priv->lastPopupXPosition = priv->lastPopupYPosition = -1;
priv->editable = false;
- priv->backForwardList = webkit_web_back_forward_list_new_with_web_view(webView);
+ priv->backForwardList = adoptGRef(webkit_web_back_forward_list_new_with_web_view(webView));
priv->zoomFullContent = FALSE;
- priv->webSettings = webkit_web_settings_new();
+ priv->webSettings = adoptGRef(webkit_web_settings_new());
webkit_web_view_update_settings(webView);
- g_signal_connect(priv->webSettings, "notify", G_CALLBACK(webkit_web_view_settings_notify), webView);
-
- priv->webWindowFeatures = webkit_web_window_features_new();
+ g_signal_connect(priv->webSettings.get(), "notify", G_CALLBACK(webkit_web_view_settings_notify), webView);
- priv->subResources = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref);
+ priv->webWindowFeatures = adoptGRef(webkit_web_window_features_new());
- priv->tooltipText = 0;
+ priv->subResources = adoptGRef(g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_object_unref));
}
GtkWidget* webkit_web_view_new(void)
@@ -2884,9 +2839,7 @@ void webkit_web_view_set_settings(WebKitWebView* webView, WebKitWebSettings* web
g_return_if_fail(WEBKIT_IS_WEB_SETTINGS(webSettings));
WebKitWebViewPrivate* priv = webView->priv;
- g_signal_handlers_disconnect_by_func(priv->webSettings, (gpointer)webkit_web_view_settings_notify, webView);
- g_object_unref(priv->webSettings);
- g_object_ref(webSettings);
+ g_signal_handlers_disconnect_by_func(priv->webSettings.get(), (gpointer)webkit_web_view_settings_notify, webView);
priv->webSettings = webSettings;
webkit_web_view_update_settings(webView);
g_signal_connect(webSettings, "notify", G_CALLBACK(webkit_web_view_settings_notify), webView);
@@ -2898,7 +2851,7 @@ WebKitWebSettings* webkit_web_view_get_settings(WebKitWebView* webView)
g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), NULL);
WebKitWebViewPrivate* priv = webView->priv;
- return priv->webSettings;
+ return priv->webSettings.get();
}
/**
@@ -2922,7 +2875,7 @@ WebKitWebInspector* webkit_web_view_get_inspector(WebKitWebView* webView)
g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), NULL);
WebKitWebViewPrivate* priv = webView->priv;
- return priv->webInspector;
+ return priv->webInspector.get();
}
// internal
@@ -2933,11 +2886,9 @@ static void webkit_web_view_set_window_features(WebKitWebView* webView, WebKitWe
if (!webWindowFeatures)
return;
- if (webkit_web_window_features_equal(priv->webWindowFeatures, webWindowFeatures))
+ if (webkit_web_window_features_equal(priv->webWindowFeatures.get(), webWindowFeatures))
return;
- g_object_unref(priv->webWindowFeatures);
- g_object_ref(webWindowFeatures);
priv->webWindowFeatures = webWindowFeatures;
}
@@ -2957,7 +2908,7 @@ WebKitWebWindowFeatures* webkit_web_view_get_window_features(WebKitWebView* webV
g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), NULL);
WebKitWebViewPrivate* priv = webView->priv;
- return priv->webWindowFeatures;
+ return priv->webWindowFeatures.get();
}
/**
@@ -3027,7 +2978,7 @@ WebKitWebBackForwardList* webkit_web_view_get_back_forward_list(WebKitWebView* w
if (!core(webView) || !core(webView)->backForwardList()->enabled())
return NULL;
- return priv->backForwardList;
+ return priv->backForwardList.get();
}
/**
@@ -3787,7 +3738,7 @@ void webkit_web_view_zoom_in(WebKitWebView* webView)
WebKitWebViewPrivate* priv = webView->priv;
gfloat zoomMultiplierRatio;
- g_object_get(priv->webSettings, "zoom-step", &zoomMultiplierRatio, NULL);
+ g_object_get(priv->webSettings.get(), "zoom-step", &zoomMultiplierRatio, NULL);
webkit_web_view_set_zoom_level(webView, webkit_web_view_get_zoom_level(webView) + zoomMultiplierRatio);
}
@@ -3808,7 +3759,7 @@ void webkit_web_view_zoom_out(WebKitWebView* webView)
WebKitWebViewPrivate* priv = webView->priv;
gfloat zoomMultiplierRatio;
- g_object_get(priv->webSettings, "zoom-step", &zoomMultiplierRatio, NULL);
+ g_object_get(priv->webSettings.get(), "zoom-step", &zoomMultiplierRatio, NULL);
webkit_web_view_set_zoom_level(webView, webkit_web_view_get_zoom_level(webView) - zoomMultiplierRatio);
}
@@ -3923,9 +3874,8 @@ const gchar* webkit_web_view_get_encoding(WebKitWebView* webView)
if (!encoding.isEmpty()) {
WebKitWebViewPrivate* priv = webView->priv;
- g_free(priv->encoding);
- priv->encoding = g_strdup(encoding.utf8().data());
- return priv->encoding;
+ priv->encoding.set(g_strdup(encoding.utf8().data()));
+ return priv->encoding.get();
} else
return NULL;
}
@@ -3966,9 +3916,8 @@ const char* webkit_web_view_get_custom_encoding(WebKitWebView* webView)
if (!overrideEncoding.isEmpty()) {
WebKitWebViewPrivate* priv = webView->priv;
- g_free (priv->customEncoding);
- priv->customEncoding = g_strdup(overrideEncoding.utf8().data());
- return priv->customEncoding;
+ priv->customEncoding.set(g_strdup(overrideEncoding.utf8().data()));
+ return priv->customEncoding.get();
} else
return NULL;
}
@@ -4123,11 +4072,11 @@ void webkit_web_view_add_resource(WebKitWebView* webView, char* identifier, WebK
if (!priv->mainResource) {
priv->mainResource = webResource;
- priv->mainResourceIdentifier = g_strdup(identifier);
+ priv->mainResourceIdentifier.set(g_strdup(identifier));
return;
}
- g_hash_table_insert(priv->subResources, identifier, webResource);
+ g_hash_table_insert(priv->subResources.get(), identifier, webResource);
}
WebKitWebResource* webkit_web_view_get_resource(WebKitWebView* webView, char* identifier)
@@ -4135,13 +4084,13 @@ WebKitWebResource* webkit_web_view_get_resource(WebKitWebView* webView, char* id
WebKitWebViewPrivate* priv = webView->priv;
gpointer webResource = NULL;
- gboolean resourceFound = g_hash_table_lookup_extended(priv->subResources, identifier, NULL, &webResource);
+ gboolean resourceFound = g_hash_table_lookup_extended(priv->subResources.get(), identifier, NULL, &webResource);
// The only resource we do not store in this hash table is the
// main! If we did not find a request, it probably means the load
// has been interrupted while while a resource was still being
// loaded.
- if (!resourceFound && !g_str_equal(identifier, priv->mainResourceIdentifier))
+ if (!resourceFound && !g_str_equal(identifier, priv->mainResourceIdentifier.get()))
return NULL;
if (!webResource)
@@ -4152,30 +4101,24 @@ WebKitWebResource* webkit_web_view_get_resource(WebKitWebView* webView, char* id
WebKitWebResource* webkit_web_view_get_main_resource(WebKitWebView* webView)
{
- return webView->priv->mainResource;
+ return webView->priv->mainResource.get();
}
void webkit_web_view_clear_resources(WebKitWebView* webView)
{
WebKitWebViewPrivate* priv = webView->priv;
-
- g_free(priv->mainResourceIdentifier);
- priv->mainResourceIdentifier = NULL;
-
- if (priv->mainResource) {
- g_object_unref(priv->mainResource);
- priv->mainResource = NULL;
- }
+ priv->mainResourceIdentifier.clear();
+ priv->mainResource.clear();
if (priv->subResources)
- g_hash_table_remove_all(priv->subResources);
+ g_hash_table_remove_all(priv->subResources.get());
}
GList* webkit_web_view_get_subresources(WebKitWebView* webView)
{
WebKitWebViewPrivate* priv = webView->priv;
- GList* subResources = g_hash_table_get_values(priv->subResources);
- return g_list_remove(subResources, priv->mainResource);
+ GList* subResources = g_hash_table_get_values(priv->subResources.get());
+ return g_list_remove(subResources, priv->mainResource.get());
}
/* From EventHandler.cpp */
@@ -4191,12 +4134,11 @@ void webkit_web_view_set_tooltip_text(WebKitWebView* webView, const char* toolti
{
#if GTK_CHECK_VERSION(2, 12, 0)
WebKitWebViewPrivate* priv = webView->priv;
- g_free(priv->tooltipText);
if (tooltip && *tooltip != '\0') {
- priv->tooltipText = g_strdup(tooltip);
+ priv->tooltipText.set(g_strdup(tooltip));
gtk_widget_set_has_tooltip(GTK_WIDGET(webView), TRUE);
} else {
- priv->tooltipText = 0;
+ priv->tooltipText.clear();
gtk_widget_set_has_tooltip(GTK_WIDGET(webView), FALSE);
}
@@ -4254,9 +4196,8 @@ G_CONST_RETURN gchar* webkit_web_view_get_icon_uri(WebKitWebView* webView)
String iconURL = iconDatabase()->iconURLForPageURL(corePage->mainFrame()->loader()->url().prettyURL());
WebKitWebViewPrivate* priv = webView->priv;
- g_free(priv->iconURI);
- priv->iconURI = g_strdup(iconURL.utf8().data());
- return priv->iconURI;
+ priv->iconURI.set(g_strdup(iconURL.utf8().data()));
+ return priv->iconURI.get();
}
/**