[EFL] Add API to notify that mixed content has been loaded.
authorkubo@profusion.mobi <kubo@profusion.mobi@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Dec 2011 18:18:34 +0000 (18:18 +0000)
committerkubo@profusion.mobi <kubo@profusion.mobi@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Dec 2011 18:18:34 +0000 (18:18 +0000)
https://bugs.webkit.org/show_bug.cgi?id=74301

Reviewed by Gustavo Noronha Silva.

When mixed content is displayed/run, both frames and views
emit the proper signals to notify API users.

* WebCoreSupport/FrameLoaderClientEfl.cpp:
(WebCore::FrameLoaderClientEfl::didDisplayInsecureContent):
(WebCore::FrameLoaderClientEfl::didRunInsecureContent):
* ewk/ewk_frame.cpp:
(ewk_frame_view_create_for_view):
(ewk_frame_mixed_content_displayed_get):
(ewk_frame_mixed_content_run_get):
(ewk_frame_mixed_content_displayed_set):
(ewk_frame_mixed_content_run_set):
* ewk/ewk_frame.h:
* ewk/ewk_private.h:
* ewk/ewk_view.cpp:
(ewk_view_frame_main_cleared):
(ewk_view_mixed_content_displayed_get):
(ewk_view_mixed_content_run_get):
(ewk_view_mixed_content_displayed_set):
(ewk_view_mixed_content_run_set):
* ewk/ewk_view.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@102600 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/efl/ChangeLog
Source/WebKit/efl/WebCoreSupport/FrameLoaderClientEfl.cpp
Source/WebKit/efl/ewk/ewk_frame.cpp
Source/WebKit/efl/ewk/ewk_frame.h
Source/WebKit/efl/ewk/ewk_private.h
Source/WebKit/efl/ewk/ewk_view.cpp
Source/WebKit/efl/ewk/ewk_view.h

index 2b3156f04fa08f3e92a913a09c316a023574b70c..6bd21bda8dbabdce69b494288b53bf15cb06f4d3 100644 (file)
@@ -1,3 +1,32 @@
+2011-12-12  Raphael Kubo da Costa  <kubo@profusion.mobi>
+
+        [EFL] Add API to notify that mixed content has been loaded.
+        https://bugs.webkit.org/show_bug.cgi?id=74301
+
+        Reviewed by Gustavo Noronha Silva.
+
+        When mixed content is displayed/run, both frames and views
+        emit the proper signals to notify API users.
+
+        * WebCoreSupport/FrameLoaderClientEfl.cpp:
+        (WebCore::FrameLoaderClientEfl::didDisplayInsecureContent):
+        (WebCore::FrameLoaderClientEfl::didRunInsecureContent):
+        * ewk/ewk_frame.cpp:
+        (ewk_frame_view_create_for_view):
+        (ewk_frame_mixed_content_displayed_get):
+        (ewk_frame_mixed_content_run_get):
+        (ewk_frame_mixed_content_displayed_set):
+        (ewk_frame_mixed_content_run_set):
+        * ewk/ewk_frame.h:
+        * ewk/ewk_private.h:
+        * ewk/ewk_view.cpp:
+        (ewk_view_frame_main_cleared):
+        (ewk_view_mixed_content_displayed_get):
+        (ewk_view_mixed_content_run_get):
+        (ewk_view_mixed_content_displayed_set):
+        (ewk_view_mixed_content_run_set):
+        * ewk/ewk_view.h:
+
 2011-12-12  Raphael Kubo da Costa  <kubo@profusion.mobi>
 
         [EFL] Add API to manage root X.509 CA certificates.
index 6885e82fcceb8c20e389c515d7cbb1c72b0d82eb..2fd4f91d462499393f664ac82b982785d05c04cc 100644 (file)
@@ -502,12 +502,12 @@ bool FrameLoaderClientEfl::shouldStopLoadingForHistoryItem(HistoryItem* item) co
 
 void FrameLoaderClientEfl::didDisplayInsecureContent()
 {
-    notImplemented();
+    ewk_frame_mixed_content_displayed_set(m_frame, true);
 }
 
 void FrameLoaderClientEfl::didRunInsecureContent(SecurityOrigin*, const KURL&)
 {
-    notImplemented();
+    ewk_frame_mixed_content_run_set(m_frame, true);
 }
 
 void FrameLoaderClientEfl::didDetectXSS(const KURL&, bool)
index de37bae6b890abd4fa6b92066fe1e21ed5213163..9bb523e4dedfb6923bb5ac7a5208f2b0cabc685f 100644 (file)
@@ -70,6 +70,8 @@ struct Ewk_Frame_Smart_Data {
     const char* uri;
     const char* name;
     bool editable : 1;
+    bool hasDisplayedMixedContent : 1;
+    bool hasRunMixedContent : 1;
 };
 
 struct Eina_Iterator_Ewk_Frame {
@@ -1451,6 +1453,9 @@ void ewk_frame_view_create_for_view(Evas_Object* ewkFrame, Evas_Object* view)
     const char* theme = ewk_view_theme_get(view);
     smartData->frame->view()->setEdjeTheme(theme);
     smartData->frame->view()->setEvasObject(ewkFrame);
+
+    ewk_frame_mixed_content_displayed_set(ewkFrame, false);
+    ewk_frame_mixed_content_run_set(ewkFrame, false);
 }
 
 ssize_t ewk_frame_source_get(const Evas_Object* ewkFrame, char** frameSource)
@@ -1563,6 +1568,18 @@ char* ewk_frame_plain_text_get(const Evas_Object* ewkFrame)
     return strdup(documentElement->innerText().utf8().data());
 }
 
+Eina_Bool ewk_frame_mixed_content_displayed_get(const Evas_Object* ewkFrame)
+{
+    EWK_FRAME_SD_GET_OR_RETURN(ewkFrame, smartData, false);
+    return smartData->hasDisplayedMixedContent;
+}
+
+Eina_Bool ewk_frame_mixed_content_run_get(const Evas_Object* ewkFrame)
+{
+    EWK_FRAME_SD_GET_OR_RETURN(ewkFrame, smartData, false);
+    return smartData->hasRunMixedContent;
+}
+
 /**
  * @internal
  * Reports uri changed and swap internal string reference.
@@ -1641,6 +1658,52 @@ void ewk_frame_editor_client_contents_changed(Evas_Object* ewkFrame)
     ewk_view_editor_client_contents_changed(smartData->view);
 }
 
+/**
+ * @internal
+ * Defines whether the frame has displayed mixed content.
+ *
+ * When a frame has displayed mixed content, the currently loaded URI is secure (HTTPS) but it has
+ * loaded and displayed a resource, such as an image, from an insecure (HTTP) source.
+ *
+ * @param hasDisplayed Do or do not clear the flag from the frame. If @c true, the container view
+ *                     is also notified and it then emits the "mixedcontent,displayed" signal.
+ *
+ * Emits signal: "mixedcontent,displayed" with no parameters when @p hasDisplayed is @c true.
+ */
+void ewk_frame_mixed_content_displayed_set(Evas_Object* ewkFrame, bool hasDisplayed)
+{
+    EWK_FRAME_SD_GET_OR_RETURN(ewkFrame, smartData);
+    smartData->hasDisplayedMixedContent = hasDisplayed;
+
+    if (hasDisplayed) {
+        ewk_view_mixed_content_displayed_set(smartData->view, true);
+        evas_object_smart_callback_call(ewkFrame, "mixedcontent,displayed", 0);
+    }
+}
+
+/**
+ * @internal
+ * Defines whether the frame has run mixed content.
+ *
+ * When a frame has run mixed content, the currently loaded URI is secure (HTTPS) but it has
+ * loaded and run a resource, such as a script, from an insecure (HTTP) source.
+ *
+ * @param hasDisplayed Do or do not clear the flag from the frame. If @c true, the container view
+ *                     is also notified and it then emits the "mixedcontent,run" signal.
+ *
+ * Emits signal: "mixedcontent,run" with no parameters when @p hasRun is @c true.
+ */
+void ewk_frame_mixed_content_run_set(Evas_Object* ewkFrame, bool hasRun)
+{
+    EWK_FRAME_SD_GET_OR_RETURN(ewkFrame, smartData);
+    smartData->hasRunMixedContent = hasRun;
+
+    if (hasRun) {
+        ewk_view_mixed_content_run_set(smartData->view, true);
+        evas_object_smart_callback_call(ewkFrame, "mixedcontent,run", 0);
+    }
+}
+
 namespace EWKPrivate {
 
 WebCore::Frame *coreFrame(const Evas_Object *ewkFrame)
index 57a0df067f2cca65724d6a0a23f634b60bf439b0..e3720ab5f87eb9e112ba310c03801622bd262128 100644 (file)
@@ -52,6 +52,8 @@
  *    from 0.0 to 1.0, connect to individual frames for fine grained).
  *  - "load,provisional", void: frame started provisional load.
  *  - "load,started", void: frame started loading the document.
+ *  - "mixedcontent,displayed", void: frame has loaded and displayed mixed content.
+ *  - "mixedcontent,run", void: frame has loaded and run mixed content.
  *  - "navigation,first", void: first navigation was occurred.
  *  - "resource,request,new", Ewk_Frame_Resource_Request*: reports that
  *    there's a new resource request.
@@ -842,6 +844,36 @@ EAPI Eina_List *ewk_frame_resources_location_get(const Evas_Object *o);
  */
 EAPI char* ewk_frame_plain_text_get(const Evas_Object* o);
 
+/**
+ * Returns whether the frame has displayed mixed content.
+ *
+ * When a frame has displayed mixed content, its current URI is an HTTPS one, but it has
+ * loaded and displayed a resource (such as an image) from an insecure (non-HTTPS) URI.
+ * Both the frame and the container view send a "mixedcontent,displayed" signal in this case.
+ *
+ * The status is reset only when a load event occurs (eg. the page is reloaded or a new page is loaded).
+ *
+ * @param o The frame to query.
+ *
+ * @sa ewk_view_mixed_content_displayed_get
+ */
+EAPI Eina_Bool ewk_frame_mixed_content_displayed_get(const Evas_Object *o);
+
+/**
+ * Returns whether the frame has run mixed content.
+ *
+ * When a frame has run mixed content, its current URI is an HTTPS one, but it has
+ * loaded and run a resource (such as an image) from an insecure (non-HTTPS) URI.
+ * Both the frame and the container view send a "mixedcontent,run" signal in this case.
+ *
+ * The status is reset only when a load event occurs (eg. the page is reloaded or a new page is loaded).
+ *
+ * @param o The frame to query.
+ *
+ * @sa ewk_view_mixed_content_run_get
+ */
+EAPI Eina_Bool ewk_frame_mixed_content_run_get(const Evas_Object *o);
+
 #ifdef __cplusplus
 }
 #endif
index 6f53321f64f240af0ce913c4b97d52f745922eb6..5a0a048b4b896a467c46a918ff16c4d54d8b77c0 100644 (file)
@@ -222,6 +222,11 @@ const char* ewk_settings_default_user_agent_get();
 void ewk_frame_editor_client_contents_changed(Evas_Object* o);
 void ewk_frame_editor_client_selection_changed(Evas_Object* o);
 
+void ewk_frame_mixed_content_displayed_set(Evas_Object* ewkFrame, bool hasDisplayed);
+void ewk_frame_mixed_content_run_set(Evas_Object* ewkFrame, bool hasRun);
+void ewk_view_mixed_content_displayed_set(Evas_Object* ewkView, bool hasDisplayed);
+void ewk_view_mixed_content_run_set(Evas_Object* ewkView, bool hasRun);
+
 #ifdef __cplusplus
 
 }
index 29be21950be40901f6dc2fd43cce638e84cb9cbb..9cc2b932a927ecd7bde9fa20756518fa0dfb8d22 100644 (file)
@@ -148,6 +148,8 @@ struct _Ewk_View_Private_Data {
     struct {
         bool viewCleared : 1;
         bool needTouchEvents : 1;
+        bool hasDisplayedMixedContent : 1;
+        bool hasRunMixedContent : 1;
     } flags;
     struct {
         const char* userAgent;
@@ -2847,6 +2849,9 @@ void ewk_view_frame_main_cleared(Evas_Object* ewkView)
     EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
     EINA_SAFETY_ON_NULL_RETURN(smartData->api->flush);
     smartData->api->flush(smartData);
+
+    ewk_view_mixed_content_displayed_set(ewkView, false);
+    ewk_view_mixed_content_run_set(ewkView, false);
 }
 
 /**
@@ -3767,6 +3772,20 @@ Ewk_View_Mode ewk_view_mode_get(const Evas_Object* ewkView)
     return static_cast<Ewk_View_Mode>(priv->page->viewMode());
 }
 
+Eina_Bool ewk_view_mixed_content_displayed_get(const Evas_Object* ewkView)
+{
+    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, false);
+    EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, false);
+    return priv->flags.hasDisplayedMixedContent;
+}
+
+Eina_Bool ewk_view_mixed_content_run_get(const Evas_Object* ewkView)
+{
+    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData, false);
+    EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv, false);
+    return priv->flags.hasRunMixedContent;
+}
+
 /**
  * @internal
  * Reports the view that editor client selection has changed.
@@ -3793,6 +3812,52 @@ void ewk_view_editor_client_contents_changed(Evas_Object* ewkView)
     evas_object_smart_callback_call(ewkView, "editorclient,contents,changed", 0);
 }
 
+/**
+ * @internal
+ * Defines whether the view has displayed mixed content.
+ *
+ * When a view has displayed mixed content, any of its frames has loaded an HTTPS URI
+ * which has itself loaded and displayed a resource (such as an image) from an insecure,
+ * that is, non-HTTPS, URI.
+ *
+ * @param hasDisplayed Do or do not clear the flag from the view.
+ *
+ * Emits signal: "mixedcontent,displayed" with no parameters when @p hasDisplayed is @c true.
+ */
+void ewk_view_mixed_content_displayed_set(Evas_Object* ewkView, bool hasDisplayed)
+{
+    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
+    EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
+
+    priv->flags.hasDisplayedMixedContent = hasDisplayed;
+
+    if (hasDisplayed)
+        evas_object_smart_callback_call(ewkView, "mixedcontent,displayed", 0);
+}
+
+/**
+ * @internal
+ * Defines whether the view has run mixed content.
+ *
+ * When a view has run mixed content, any of its frames has loaded an HTTPS URI
+ * which has itself loaded and run a resource (such as a script) from an insecure,
+ * that is, non-HTTPS, URI.
+ *
+ * @param hasRun Do or do not clear the flag from the view.
+ *
+ * Emits signal: "mixedcontent,run" with no parameters when @p hasRun is @c true.
+ */
+void ewk_view_mixed_content_run_set(Evas_Object* ewkView, bool hasRun)
+{
+    EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData);
+    EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv);
+
+    priv->flags.hasRunMixedContent = hasRun;
+
+    if (hasRun)
+        evas_object_smart_callback_call(ewkView, "mixedcontent,run", 0);
+}
+
 Eina_Bool ewk_view_visibility_state_set(Evas_Object* ewkView, Ewk_Page_Visibility_State pageVisibilityState, Eina_Bool initialState)
 {
 #if ENABLE(PAGE_VISIBILITY_API)
index a3aaa653ddf8a04b2daf633ff13bb62f2363f8ba..ec5665c522c29722238f3021dccb378f50510768 100644 (file)
@@ -58,6 +58,8 @@
  *  - "menubar,visible,get", Eina_Bool *: expects a @c EINA_TRUE if menubar is
  *    visible; @c EINA_FALSE, otherwise.
  *  - "menubar,visible,set", Eina_Bool: sets menubar visibility.
+ *  - "mixedcontent,displayed", void: any of the containing frames has loaded and displayed mixed content.
+ *  - "mixedcontent,run", void: any of the containing frames has loaded and run mixed content.
  *  - "ready", void: page is fully loaded.
  *  - "scrollbars,visible,get", Eina_Bool *: expects a @c EINA_TRUE if scrollbars
  *    are visible; @c EINA_FALSE, otherwise.
@@ -2277,6 +2279,40 @@ EAPI Eina_Bool ewk_view_visibility_state_set(Evas_Object* o, Ewk_Page_Visibility
  */
 EAPI Ewk_Page_Visibility_State ewk_view_visibility_state_get(const Evas_Object *o);
 
+/**
+ * Returns whether the view has displayed mixed content.
+ *
+ * When a view has displayed mixed content, any of its frames has loaded an HTTPS URI
+ * which has itself loaded and displayed a resource (such as an image) from an insecure,
+ * that is, non-HTTPS, URI.
+ *
+ * The status is reset only when a load event occurs (eg. the page is reloaded or a new page is loaded).
+ *
+ * When one of the containing frames displays mixed content, the view emits the "mixedcontent,displayed" signal.
+ *
+ * @param o The view to query.
+ *
+ * @sa ewk_frame_mixed_content_displayed_get
+ */
+EAPI Eina_Bool ewk_view_mixed_content_displayed_get(const Evas_Object *o);
+
+/**
+ * Returns whether the view has run mixed content.
+ *
+ * When a view has run mixed content, any of its frames has loaded an HTTPS URI
+ * which has itself loaded and run a resource (such as an image) from an insecure,
+ * that is, non-HTTPS, URI.
+ *
+ * The status is reset only when a load event occurs (eg. the page is reloaded or a new page is loaded).
+ *
+ * When one of the containing frames runs mixed content, the view emits the "mixedcontent,run" signal.
+ *
+ * @param o The view to query.
+ *
+ * @sa ewk_frame_mixed_content_run_get
+ */
+EAPI Eina_Bool ewk_view_mixed_content_run_get(const Evas_Object *o);
+
 #ifdef __cplusplus
 }
 #endif