summaryrefslogtreecommitdiffstats
path: root/WebKit/efl
diff options
context:
space:
mode:
authorKristian Monsen <kristianm@google.com>2010-06-28 16:42:48 +0100
committerKristian Monsen <kristianm@google.com>2010-07-02 10:29:56 +0100
commit06ea8e899e48f1f2f396b70e63fae369f2f23232 (patch)
tree20c1428cd05c76f32394ab354ea35ed99acd86d8 /WebKit/efl
parent72aad67af14193199e29cdd5c4ddc095a8b9a8a8 (diff)
downloadexternal_webkit-06ea8e899e48f1f2f396b70e63fae369f2f23232.zip
external_webkit-06ea8e899e48f1f2f396b70e63fae369f2f23232.tar.gz
external_webkit-06ea8e899e48f1f2f396b70e63fae369f2f23232.tar.bz2
Merge WebKit at r61871: Initial merge by git.
Change-Id: I6cff43abca9cc4782e088a469ad4f03f166a65d5
Diffstat (limited to 'WebKit/efl')
-rw-r--r--WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp45
-rw-r--r--WebKit/efl/WebCoreSupport/ChromeClientEfl.h3
-rw-r--r--WebKit/efl/WebCoreSupport/EditorClientEfl.h3
-rw-r--r--WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp28
-rw-r--r--WebKit/efl/WebCoreSupport/InspectorClientEfl.cpp2
-rw-r--r--WebKit/efl/ewebkit.pc.in1
-rw-r--r--WebKit/efl/ewk/EWebKit.h1
-rw-r--r--WebKit/efl/ewk/ewk_private.h5
-rw-r--r--WebKit/efl/ewk/ewk_view.cpp26
-rw-r--r--WebKit/efl/ewk/ewk_view.h6
-rw-r--r--WebKit/efl/ewk/ewk_window_features.cpp156
-rw-r--r--WebKit/efl/ewk/ewk_window_features.h43
12 files changed, 299 insertions, 20 deletions
diff --git a/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp b/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp
index c51befb..8ec65b9 100644
--- a/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp
+++ b/WebKit/efl/WebCoreSupport/ChromeClientEfl.cpp
@@ -38,6 +38,7 @@
#include "DatabaseTracker.h"
#endif
#include "EWebKit.h"
+#include "FileChooser.h"
#include "FloatRect.h"
#include "FrameLoader.h"
#include "FrameLoaderClientEfl.h"
@@ -50,6 +51,8 @@
#include "ewk_private.h"
#include <wtf/text/CString.h>
+#include <Evas.h>
+
using namespace WebCore;
static inline Evas_Object* kit(Frame* frame)
@@ -115,10 +118,16 @@ void ChromeClientEfl::unfocus()
evas_object_focus_set(m_view, EINA_FALSE);
}
-Page* ChromeClientEfl::createWindow(Frame*, const FrameLoadRequest& request, const WindowFeatures& features)
+Page* ChromeClientEfl::createWindow(Frame*, const FrameLoadRequest& frameLoadRequest, const WindowFeatures& features)
{
- notImplemented();
- return 0;
+ Evas_Object* newView = ewk_view_window_create(m_view, EINA_TRUE, &features);
+ if (!newView)
+ return 0;
+
+ if (!frameLoadRequest.isEmpty())
+ ewk_view_uri_set(newView, frameLoadRequest.resourceRequest().url().string().utf8().data());
+
+ return ewk_view_core_page_get(newView);
}
void ChromeClientEfl::show()
@@ -376,7 +385,35 @@ void ChromeClientEfl::exceededDatabaseQuota(Frame* frame, const String& database
void ChromeClientEfl::runOpenPanel(Frame* frame, PassRefPtr<FileChooser> prpFileChooser)
{
- notImplemented();
+ RefPtr<FileChooser> chooser = prpFileChooser;
+ bool confirm;
+ Eina_List* selectedFilenames = 0;
+ Eina_List* suggestedFilenames = 0;
+ void* filename;
+ Vector<String> filenames;
+
+ for (unsigned i = 0; i < chooser->filenames().size(); i++) {
+ CString str = chooser->filenames()[i].utf8();
+ filename = strdup(str.data());
+ suggestedFilenames = eina_list_append(suggestedFilenames, filename);
+ }
+
+ confirm = ewk_view_run_open_panel(m_view, kit(frame), chooser->allowsMultipleFiles(), suggestedFilenames, &selectedFilenames);
+ EINA_LIST_FREE(suggestedFilenames, filename)
+ free(filename);
+
+ if (!confirm)
+ return;
+
+ EINA_LIST_FREE(selectedFilenames, filename) {
+ filenames.append((char *)filename);
+ free(filename);
+ }
+
+ if (chooser->allowsMultipleFiles())
+ chooser->chooseFiles(filenames);
+ else
+ chooser->chooseFile(filenames[0]);
}
void ChromeClientEfl::formStateDidChange(const Node*)
diff --git a/WebKit/efl/WebCoreSupport/ChromeClientEfl.h b/WebKit/efl/WebCoreSupport/ChromeClientEfl.h
index 399ef7f..fccf54f 100644
--- a/WebKit/efl/WebCoreSupport/ChromeClientEfl.h
+++ b/WebKit/efl/WebCoreSupport/ChromeClientEfl.h
@@ -26,7 +26,8 @@
#include "ChromeClient.h"
#include "KURL.h"
#include "PopupMenu.h"
-#include <Evas.h>
+
+typedef struct _Evas_Object Evas_Object;
namespace WebCore {
diff --git a/WebKit/efl/WebCoreSupport/EditorClientEfl.h b/WebKit/efl/WebCoreSupport/EditorClientEfl.h
index ead1169..a53d624 100644
--- a/WebKit/efl/WebCoreSupport/EditorClientEfl.h
+++ b/WebKit/efl/WebCoreSupport/EditorClientEfl.h
@@ -34,10 +34,11 @@
#define EditorClientEfl_h
#include "EditorClient.h"
-#include <Evas.h>
#include <wtf/Forward.h>
+typedef struct _Evas_Object Evas_Object;
+
namespace WebCore {
class Page;
diff --git a/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp b/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp
index 2358fab..438d6a0 100644
--- a/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp
+++ b/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp
@@ -707,8 +707,11 @@ void FrameLoaderClientEfl::dispatchDidFinishLoading(DocumentLoader*, unsigned lo
notImplemented();
}
-void FrameLoaderClientEfl::dispatchDidFailLoading(DocumentLoader* loader, unsigned long identifier, const ResourceError&)
+void FrameLoaderClientEfl::dispatchDidFailLoading(DocumentLoader* loader, unsigned long identifier, const ResourceError& err)
{
+ if (!shouldFallBack(err))
+ return;
+
if (m_firstData) {
FrameLoader* fl = loader->frameLoader();
fl->writer()->setEncoding(m_response.textEncodingName(), false);
@@ -735,6 +738,9 @@ void FrameLoaderClientEfl::dispatchDidFailProvisionalLoad(const ResourceError& e
void FrameLoaderClientEfl::dispatchDidFailLoad(const ResourceError& err)
{
+ if (!shouldFallBack(err))
+ return;
+
m_loadError = err;
ewk_frame_load_error(m_frame,
m_loadError.domain().utf8().data(),
@@ -782,7 +788,7 @@ ResourceError FrameLoaderClientEfl::cannotShowURLError(const ResourceRequest& re
ResourceError FrameLoaderClientEfl::interruptForPolicyChangeError(const ResourceRequest& request)
{
return ResourceError("Error", WebKitErrorFrameLoadInterruptedByPolicyChange,
- request.url().string(), "Frame load interruped by policy change");
+ request.url().string(), "Frame load interrupted by policy change");
}
ResourceError FrameLoaderClientEfl::cannotShowMIMETypeError(const ResourceResponse& response)
@@ -803,10 +809,9 @@ ResourceError FrameLoaderClientEfl::pluginWillHandleLoadError(const ResourceResp
return ResourceError("Error", 0, "", "");
}
-bool FrameLoaderClientEfl::shouldFallBack(const ResourceError&)
+bool FrameLoaderClientEfl::shouldFallBack(const ResourceError& error)
{
- notImplemented();
- return false;
+ return !(error.isCancellation() || (error.errorCode() == WebKitErrorFrameLoadInterruptedByPolicyChange));
}
bool FrameLoaderClientEfl::canCachePage() const
@@ -816,8 +821,17 @@ bool FrameLoaderClientEfl::canCachePage() const
Frame* FrameLoaderClientEfl::dispatchCreatePage()
{
- notImplemented();
- return 0;
+ if (!m_view)
+ return 0;
+
+ Evas_Object* newView = ewk_view_window_create(m_view, EINA_FALSE, 0);
+ Evas_Object* mainFrame;
+ if (!newView)
+ mainFrame = m_frame;
+ else
+ mainFrame = ewk_view_frame_main_get(newView);
+
+ return ewk_frame_core_get(mainFrame);
}
void FrameLoaderClientEfl::dispatchUnableToImplementPolicy(const ResourceError&)
diff --git a/WebKit/efl/WebCoreSupport/InspectorClientEfl.cpp b/WebKit/efl/WebCoreSupport/InspectorClientEfl.cpp
index 2fa860a..6bfd6ad 100644
--- a/WebKit/efl/WebCoreSupport/InspectorClientEfl.cpp
+++ b/WebKit/efl/WebCoreSupport/InspectorClientEfl.cpp
@@ -60,7 +60,7 @@ void InspectorClientEfl::storeSetting(const String&, const String&)
bool InspectorClientEfl::sendMessageToFrontend(const String&)
{
- notImpelemented();
+ notImplemented();
return false;
}
diff --git a/WebKit/efl/ewebkit.pc.in b/WebKit/efl/ewebkit.pc.in
index f58e5bf..d618e30 100644
--- a/WebKit/efl/ewebkit.pc.in
+++ b/WebKit/efl/ewebkit.pc.in
@@ -8,4 +8,5 @@ Description: Web content engine for EFL applications
Version: @PROJECT_VERSION@
Requires: cairo evas ecore
Libs: -L${libdir} -lewebkit @EXTRA_EWEBKIT_LINK@
+Libs.private: @LIBS_PRIVATE@
Cflags: -I${includedir}/EWebKit
diff --git a/WebKit/efl/ewk/EWebKit.h b/WebKit/efl/ewk/EWebKit.h
index a61cc9d..e08c4a5 100644
--- a/WebKit/efl/ewk/EWebKit.h
+++ b/WebKit/efl/ewk/EWebKit.h
@@ -29,6 +29,7 @@
#include "ewk_main.h"
#include "ewk_settings.h"
#include "ewk_view.h"
+#include "ewk_window_features.h"
#include <Evas.h>
diff --git a/WebKit/efl/ewk/ewk_private.h b/WebKit/efl/ewk/ewk_private.h
index 5f66fd8..facd6aa 100644
--- a/WebKit/efl/ewk/ewk_private.h
+++ b/WebKit/efl/ewk/ewk_private.h
@@ -56,6 +56,7 @@ void ewk_view_frame_main_load_started(Evas_Object *o);
void ewk_view_load_finished(Evas_Object *o, const Ewk_Frame_Load_Error *error);
void ewk_view_load_error(Evas_Object *o, const Ewk_Frame_Load_Error *error);
void ewk_view_load_progress_changed(Evas_Object *o);
+Evas_Object *ewk_view_window_create(Evas_Object *o, Eina_Bool javascript, const WebCore::WindowFeatures* coreFeatures);
void ewk_view_mouse_link_hover_in(Evas_Object *o, void *data);
void ewk_view_mouse_link_hover_out(Evas_Object *o);
@@ -83,6 +84,8 @@ Eina_Bool ewk_view_run_javascript_prompt(Evas_Object *o, Evas_Object *fra
Eina_Bool ewk_view_should_interrupt_javascript(Evas_Object *o);
uint64_t ewk_view_exceeded_database_quota(Evas_Object *o, Evas_Object *frame, const char *databaseName, uint64_t current_size, uint64_t expected_size);
+Eina_Bool ewk_view_run_open_panel(Evas_Object *o, Evas_Object *frame, Eina_Bool allows_multiple_files, const Eina_List *suggested_filenames, Eina_List **selected_filenames);
+
void ewk_view_repaint(Evas_Object *o, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
void ewk_view_scroll(Evas_Object *o, Evas_Coord dx, Evas_Coord dy, Evas_Coord sx, Evas_Coord sy, Evas_Coord sw, Evas_Coord sh, Evas_Coord cx, Evas_Coord cy, Evas_Coord cw, Evas_Coord ch, Eina_Bool main_frame);
WebCore::Page *ewk_view_core_page_get(const Evas_Object *o);
@@ -102,6 +105,8 @@ void ewk_context_menu_item_append(Ewk_Context_Menu *o, WebCore::Con
Ewk_Context_Menu *ewk_context_menu_custom_get(Ewk_Context_Menu *o);
void ewk_context_menu_show(Ewk_Context_Menu *o);
+Ewk_Window_Features *ewk_window_features_new_from_core(const WebCore::WindowFeatures* core);
+
Evas_Object *ewk_frame_add(Evas *e);
Eina_Bool ewk_frame_init(Evas_Object *o, Evas_Object *view, WebCore::Frame *frame);
Evas_Object *ewk_frame_child_add(Evas_Object *o, WTF::PassRefPtr<WebCore::Frame> child, const WebCore::String& name, const WebCore::KURL& url, const WebCore::String& referrer);
diff --git a/WebKit/efl/ewk/ewk_view.cpp b/WebKit/efl/ewk/ewk_view.cpp
index d5920e5..8d66734 100644
--- a/WebKit/efl/ewk/ewk_view.cpp
+++ b/WebKit/efl/ewk/ewk_view.cpp
@@ -18,6 +18,7 @@
Boston, MA 02110-1301, USA.
*/
+#define __STDC_FORMAT_MACROS
#include "config.h"
#include "ewk_view.h"
@@ -43,6 +44,7 @@
#include <Eina.h>
#include <Evas.h>
#include <eina_safety_checks.h>
+#include <inttypes.h>
#include <sys/time.h>
#define ZOOM_MIN (0.05)
@@ -706,6 +708,7 @@ static void _ewk_view_smart_del(Evas_Object* o)
EWK_VIEW_SD_GET(o, sd);
Ewk_View_Private_Data* priv = sd ? sd->_priv : 0;
+ ewk_view_stop(o);
_parent_sc.del(o);
_ewk_view_priv_del(priv);
}
@@ -3150,21 +3153,36 @@ void ewk_view_restore_state(Evas_Object* o, Evas_Object* frame)
/**
* @internal
* Delegates to browser the creation of a new window. If it is not implemented,
- * current view is returned, so navigation might continue in same window.
+ * current view is returned, so navigation might continue in same window. If
+ * browser supports the creation of new windows, a new Ewk_Window_Features is
+ * created and passed to browser. If it intends to keep the request for opening
+ * the window later it must increments the Ewk_Winwdow_Features ref count by
+ * calling ewk_window_features_ref(window_features). Otherwise this struct will
+ * be freed after returning to this function.
*
* @param o Current view.
+ * @param javascript @c EINA_TRUE if the new window is originated from javascript,
+ * @c EINA_FALSE otherwise
+ * @param window_features Features of the new window being created. If it's @c
+ * NULL, it will be created a window with default features.
*
* @return New view, in case smart class implements the creation of new windows;
* else, current view @param o.
+ *
+ * @see ewk_window_features_ref().
*/
-Evas_Object* ewk_view_window_create(Evas_Object* o)
+Evas_Object* ewk_view_window_create(Evas_Object* o, Eina_Bool javascript, const WebCore::WindowFeatures* coreFeatures)
{
EWK_VIEW_SD_GET_OR_RETURN(o, sd, 0);
if (!sd->api->window_create)
return o;
- return sd->api->window_create(sd);
+ Ewk_Window_Features* window_features = ewk_window_features_new_from_core(coreFeatures);
+ Evas_Object* view = sd->api->window_create(sd, javascript, window_features);
+ ewk_window_features_unref(window_features);
+
+ return view;
}
/**
@@ -3449,7 +3467,7 @@ uint64_t ewk_view_exceeded_database_quota(Evas_Object* o, Evas_Object* frame, co
if (!sd->api->exceeded_database_quota)
return 0;
- ERR("##### %lu %lu", current_size, expected_size);
+ INF("current_size=%"PRIu64" expected_size="PRIu64, current_size, expected_size);
return sd->api->exceeded_database_quota(sd, frame, databaseName, current_size, expected_size);
}
diff --git a/WebKit/efl/ewk/ewk_view.h b/WebKit/efl/ewk/ewk_view.h
index b029a68..a8fe3b8 100644
--- a/WebKit/efl/ewk/ewk_view.h
+++ b/WebKit/efl/ewk/ewk_view.h
@@ -21,9 +21,11 @@
#ifndef ewk_view_h
#define ewk_view_h
+#include "ewk_history.h"
+#include "ewk_window_features.h"
+
#include <Evas.h>
#include <cairo.h>
-#include <ewk_history.h>
#ifdef __cplusplus
extern "C" {
@@ -95,7 +97,7 @@ struct _Ewk_View_Smart_Class {
Evas_Smart_Class sc; /**< all but 'data' is free to be changed. */
unsigned long version;
- Evas_Object *(*window_create)(Ewk_View_Smart_Data *sd); /**< creates a new window, requested by webkit */
+ Evas_Object *(*window_create)(Ewk_View_Smart_Data *sd, Eina_Bool javascript, const Ewk_Window_Features *window_features); /**< creates a new window, requested by webkit */
// hooks to allow different backing stores
Evas_Object *(*backing_store_add)(Ewk_View_Smart_Data *sd); /**< must be defined */
Eina_Bool (*scrolls_process)(Ewk_View_Smart_Data *sd); /**< must be defined */
diff --git a/WebKit/efl/ewk/ewk_window_features.cpp b/WebKit/efl/ewk/ewk_window_features.cpp
new file mode 100644
index 0000000..3855e89
--- /dev/null
+++ b/WebKit/efl/ewk/ewk_window_features.cpp
@@ -0,0 +1,156 @@
+/*
+ Copyright (C) 2010 ProFUSION embedded systems
+ Copyright (C) 2010 Samsung Electronics
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "config.h"
+#include "ewk_window_features.h"
+
+#include "WindowFeatures.h"
+#include "ewk_private.h"
+
+#include <Eina.h>
+
+struct _Ewk_Window_Features {
+ unsigned int __ref;
+ WebCore::WindowFeatures* core;
+};
+
+/**
+ * Decrease the ref count of an Ewk_Window_Features, possibly freeing it.
+ *
+ * When its ref count reaches 0, @param window_features is freed.
+ *
+ * @param window_features The window's features.
+ */
+EAPI void ewk_window_features_unref(Ewk_Window_Features* window_features)
+{
+ EINA_SAFETY_ON_NULL_RETURN(window_features);
+ EINA_SAFETY_ON_FALSE_RETURN(window_features->__ref > 0);
+
+ if (--window_features->__ref)
+ return;
+
+ delete window_features->core;
+ window_features->core = 0;
+ free(window_features);
+}
+
+/**
+ * Increase the ref count of an Ewk_Window_Features
+ *
+ * @param window_features The window's features.
+ */
+EAPI void ewk_window_features_ref(Ewk_Window_Features* window_features)
+{
+ EINA_SAFETY_ON_NULL_RETURN(window_features);
+ window_features->__ref++;
+}
+
+/**
+ * Get boolean properties
+ *
+ * @param window_features A window_features.
+ * @param toolbar_visible pointer to store if toolbar is visible.
+ * @param statusbar_visible pointer to store if statusbar is visible.
+ * @param scrollbars_visible pointer to store if scrollbars is visible.
+ * @param menubar_visible pointer to store if menubar is visible.
+ * @param locationbar_visible pointer to store if locationbar is visible.
+ * @param fullscreen pointer to store if fullscreen is enabled.
+ */
+EAPI void ewk_window_features_bool_property_get(Ewk_Window_Features* window_features, Eina_Bool* toolbar_visible, Eina_Bool* statusbar_visible, Eina_Bool* scrollbars_visible, Eina_Bool* menubar_visible, Eina_Bool* locationbar_visible, Eina_Bool* fullscreen)
+{
+ EINA_SAFETY_ON_NULL_RETURN(window_features);
+ EINA_SAFETY_ON_NULL_RETURN(window_features->core);
+
+ if (toolbar_visible)
+ *toolbar_visible = window_features->core->toolBarVisible;
+
+ if (statusbar_visible)
+ *statusbar_visible = window_features->core->statusBarVisible;
+
+ if (scrollbars_visible)
+ *scrollbars_visible = window_features->core->scrollbarsVisible;
+
+ if (menubar_visible)
+ *menubar_visible = window_features->core->menuBarVisible;
+
+ if (locationbar_visible)
+ *locationbar_visible = window_features->core->locationBarVisible;
+
+ if (fullscreen)
+ *fullscreen = window_features->core->fullscreen;
+}
+
+/**
+ * Get int properties
+ *
+ * Properties are returned in the respective pointers. Passing NULL to any of
+ * these pointers will make that property to not be returned. Make sure to check
+ * if the value returned is less than 0 before using it, since in that case it
+ * means that property was not set in @param winwdow_features.
+ *
+ * @param window_features A window_features.
+ * @param x pointer to store x position or -1 if it's not set in window_features.
+ * @param y pointer to store y position or-1 if it's not set in window_features.
+ * @param w pointer to store width or-1 if it's not set in window_features.
+ * @param h pointer to store height or-1 if it's not set in window_features.
+ */
+EAPI void ewk_window_features_int_property_get(Ewk_Window_Features* window_features, int* x, int* y, int* w, int* h)
+{
+ EINA_SAFETY_ON_NULL_RETURN(window_features);
+ EINA_SAFETY_ON_NULL_RETURN(window_features->core);
+
+ if (x)
+ *x = window_features->core->xSet ? static_cast<int>(window_features->core->x) : -1;
+
+ if (y)
+ *y = window_features->core->ySet ? static_cast<int>(window_features->core->y) : -1;
+
+ if (w)
+ *w = window_features->core->widthSet ? static_cast<int>(window_features->core->width) : -1;
+
+ if (h)
+ *h = window_features->core->heightSet ? static_cast<int>(window_features->core->height) : -1;
+}
+
+/* internal methods ****************************************************/
+
+/**
+ * @internal
+ * Create a new Ewk_Window_Features from a WebCore::WindowFeatures if @param
+ * core is not NULL or a new one with default features.
+ *
+ * A new WebCore::WindowFeatures is allocated copying @param core features and
+ * it is embedded inside an Ewk_Window_Features whose ref count is initialized.
+ *
+ * @returns a new allocated Ewk_Window_Features
+ */
+Ewk_Window_Features* ewk_window_features_new_from_core(const WebCore::WindowFeatures* core)
+{
+ Ewk_Window_Features* window_features = static_cast<Ewk_Window_Features*>(malloc(sizeof(*window_features)));
+
+ if (core)
+ window_features->core = new WebCore::WindowFeatures(*core);
+ else
+ window_features->core = new WebCore::WindowFeatures();
+
+ window_features->__ref = 1;
+
+ return window_features;
+}
diff --git a/WebKit/efl/ewk/ewk_window_features.h b/WebKit/efl/ewk/ewk_window_features.h
new file mode 100644
index 0000000..b579dc4
--- /dev/null
+++ b/WebKit/efl/ewk/ewk_window_features.h
@@ -0,0 +1,43 @@
+/*
+ Copyright (C) 2010 ProFUSION embedded systems
+ Copyright (C) 2010 Samsung Electronics
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef ewk_window_features_h
+#define ewk_window_features_h
+
+#include "ewk_eapi.h"
+
+#include <Eina.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct _Ewk_Window_Features Ewk_Window_Features;
+
+EAPI void ewk_window_features_unref(Ewk_Window_Features* window_features);
+EAPI void ewk_window_features_ref(Ewk_Window_Features* window_features);
+
+EAPI void ewk_window_features_bool_property_get(Ewk_Window_Features* window_features, Eina_Bool* toolbar_visible, Eina_Bool* statusbar_visible, Eina_Bool* scrollbars_visible, Eina_Bool* menubar_visible, Eina_Bool* locationbar_visible, Eina_Bool* fullscreen);
+EAPI void ewk_window_features_int_property_get(Ewk_Window_Features* window_features, int* x, int* y, int* w, int* h);
+
+#ifdef __cplusplus
+}
+#endif
+#endif // ewk_window_features_h