[Swfdec-commits] swfdec/swfdec_load_object.c swfdec/swfdec_player_internal.h swfdec/swfdec_policy_file.c swfdec/swfdec_policy_file.h
Benjamin Otte
company at kemper.freedesktop.org
Mon Jun 16 03:04:19 PDT 2008
swfdec/swfdec_load_object.c | 2 +-
swfdec/swfdec_player_internal.h | 4 +++-
swfdec/swfdec_policy_file.c | 31 ++++++++++++++++++++-----------
swfdec/swfdec_policy_file.h | 1 +
4 files changed, 25 insertions(+), 13 deletions(-)
New commits:
commit 6c9b0a8858122b9954aae14e812777f3159996ba
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Jun 16 11:39:31 2008 +0200
compare the right URL in policy files
makes the MySpace music player load the song list, but doesn't play the songs.
diff --git a/swfdec/swfdec_load_object.c b/swfdec/swfdec_load_object.c
index 2526366..b18b7d5 100644
--- a/swfdec/swfdec_load_object.c
+++ b/swfdec/swfdec_load_object.c
@@ -221,7 +221,7 @@ swfdec_load_object_request (gpointer objectp, gpointer playerp)
SwfdecURL *load_url = swfdec_url_new_components (
swfdec_url_get_protocol (url), swfdec_url_get_host (url),
swfdec_url_get_port (url), "crossdomain.xml", NULL);
- swfdec_player_allow_or_load (player, url, load_url,
+ swfdec_player_allow_or_load (player, load->sandbox->url, url, load_url,
swfdec_load_object_load, load);
swfdec_url_free (load_url);
}
diff --git a/swfdec/swfdec_player_internal.h b/swfdec/swfdec_player_internal.h
index d51c5e1..cb2bd1d 100644
--- a/swfdec/swfdec_player_internal.h
+++ b/swfdec/swfdec_player_internal.h
@@ -273,10 +273,12 @@ void swfdec_player_add_missing_plugin(SwfdecPlayer * player,
/* in swfdec_policy_file.c */
gboolean swfdec_player_allow_now (SwfdecPlayer * player,
+ const SwfdecURL * from,
const SwfdecURL * url);
void swfdec_player_allow_or_load (SwfdecPlayer * player,
+ const SwfdecURL * from,
const SwfdecURL * url,
- const SwfdecURL * load_url,
+ const SwfdecURL * crossdomain,
SwfdecPolicyFunc func,
gpointer data);
void swfdec_player_load_default (SwfdecPlayer * player,
diff --git a/swfdec/swfdec_policy_file.c b/swfdec/swfdec_policy_file.c
index 084202d..7915108 100644
--- a/swfdec/swfdec_policy_file.c
+++ b/swfdec/swfdec_policy_file.c
@@ -37,6 +37,7 @@
typedef struct _SwfdecPolicyFileRequest SwfdecPolicyFileRequest;
struct _SwfdecPolicyFileRequest {
+ SwfdecURL * from; /* URL we are supposed to check */
SwfdecURL * url; /* URL we are supposed to check */
SwfdecPolicyFunc func; /* function to call when we know if access is (not) allowed */
gpointer data; /* data to pass to func */
@@ -45,6 +46,7 @@ struct _SwfdecPolicyFileRequest {
static void
swfdec_policy_file_request_free (SwfdecPolicyFileRequest *request)
{
+ swfdec_url_free (request->from);
swfdec_url_free (request->url);
g_slice_free (SwfdecPolicyFileRequest, request);
}
@@ -150,7 +152,7 @@ swfdec_policy_file_finished_loading (SwfdecPolicyFile *file, const char *text)
for (walk = file->requests; walk; walk = walk->next) {
SwfdecPolicyFileRequest *request = walk->data;
- gboolean allow = swfdec_player_allow_now (file->player, request->url);
+ gboolean allow = swfdec_player_allow_now (file->player, request->from, request->url);
request->func (file->player, allow, request->data);
swfdec_policy_file_request_free (request);
}
@@ -279,7 +281,7 @@ swfdec_policy_file_is_loading (SwfdecPolicyFile *file)
}
gboolean
-swfdec_policy_file_allow (SwfdecPolicyFile *file, const SwfdecURL *url)
+swfdec_policy_file_allow (SwfdecPolicyFile *file, const SwfdecURL *from, const SwfdecURL *url)
{
GSList *walk;
gsize len;
@@ -287,9 +289,15 @@ swfdec_policy_file_allow (SwfdecPolicyFile *file, const SwfdecURL *url)
const char *hostname;
g_return_val_if_fail (SWFDEC_IS_POLICY_FILE (file), FALSE);
+ g_return_val_if_fail (from != NULL, FALSE);
g_return_val_if_fail (url != NULL, FALSE);
- hostname = swfdec_url_get_host (url);
+ /* first check if the policy file is allowing the following url */
+ if (!swfdec_url_is_parent (file->url, url))
+ return FALSE;
+
+ /* then try to find the from url in the allowed hosts */
+ hostname = swfdec_url_get_host (from);
/* This is a hack that simplifies the following code. As the pattern can not
* contain any ?, the only pattern that matches the string "?" is the pattern
* "*"
@@ -312,7 +320,7 @@ swfdec_policy_file_allow (SwfdecPolicyFile *file, const SwfdecURL *url)
/*** PLAYER API ***/
gboolean
-swfdec_player_allow_now (SwfdecPlayer *player, const SwfdecURL *url)
+swfdec_player_allow_now (SwfdecPlayer *player, const SwfdecURL *from, const SwfdecURL *url)
{
GSList *walk;
@@ -320,15 +328,15 @@ swfdec_player_allow_now (SwfdecPlayer *player, const SwfdecURL *url)
g_return_val_if_fail (url != NULL, FALSE);
for (walk = player->priv->policy_files; walk; walk = walk->next) {
- if (swfdec_policy_file_allow (walk->data, url))
+ if (swfdec_policy_file_allow (walk->data, from, url))
return TRUE;
}
return FALSE;
}
void
-swfdec_player_allow_or_load (SwfdecPlayer *player, const SwfdecURL *url,
- const SwfdecURL *load_url, SwfdecPolicyFunc func, gpointer data)
+swfdec_player_allow_or_load (SwfdecPlayer *player, const SwfdecURL *from,
+ const SwfdecURL *url, const SwfdecURL *crossdomain, SwfdecPolicyFunc func, gpointer data)
{
SwfdecPlayerPrivate *priv;
SwfdecPolicyFileRequest *request;
@@ -338,12 +346,12 @@ swfdec_player_allow_or_load (SwfdecPlayer *player, const SwfdecURL *url,
g_return_if_fail (url != NULL);
g_return_if_fail (func);
- if (swfdec_player_allow_now (player, url)) {
+ if (swfdec_player_allow_now (player, from, url)) {
func (player, TRUE, data);
return;
}
- if (load_url)
- swfdec_policy_file_new (player, load_url);
+ if (crossdomain)
+ swfdec_policy_file_new (player, crossdomain);
priv = player->priv;
if (priv->loading_policy_files == NULL) {
@@ -351,6 +359,7 @@ swfdec_player_allow_or_load (SwfdecPlayer *player, const SwfdecURL *url,
return;
}
request = g_slice_new (SwfdecPolicyFileRequest);
+ request->from = swfdec_url_copy (from);
request->url = swfdec_url_copy (url);
request->func = func;
request->data = data;
@@ -396,7 +405,7 @@ swfdec_player_load_default (SwfdecPlayer *player, const char *url_string,
SwfdecURL *load_url = swfdec_url_new_components (
swfdec_url_get_protocol (url), swfdec_url_get_host (url),
swfdec_url_get_port (url), "crossdomain.xml", NULL);
- swfdec_player_allow_or_load (player, url, load_url, func, data);
+ swfdec_player_allow_or_load (player, sandbox->url, url, load_url, func, data);
swfdec_url_free (load_url);
}
break;
diff --git a/swfdec/swfdec_policy_file.h b/swfdec/swfdec_policy_file.h
index 74c3b5b..7cfcd81 100644
--- a/swfdec/swfdec_policy_file.h
+++ b/swfdec/swfdec_policy_file.h
@@ -58,6 +58,7 @@ SwfdecPolicyFile *swfdec_policy_file_new (SwfdecPlayer * player,
const SwfdecURL * url);
gboolean swfdec_policy_file_is_loading (SwfdecPolicyFile * file);
gboolean swfdec_policy_file_allow (SwfdecPolicyFile * file,
+ const SwfdecURL * from,
const SwfdecURL * url);
More information about the Swfdec-commits
mailing list