libmalcontent: Add MCT_APP_FILTER_ERROR_DISABLED error
This indicates that app filtering is disabled globally, perhaps because it’s not installed in accountsservice properly. Signed-off-by: Philip Withnall <withnall@endlessm.com>
This commit is contained in:
parent
9c31a3462a
commit
a378e28237
|
@ -623,8 +623,23 @@ mct_get_app_filter (GDBusConnection *connection,
|
||||||
&local_error);
|
&local_error);
|
||||||
if (local_error != NULL)
|
if (local_error != NULL)
|
||||||
{
|
{
|
||||||
g_autoptr(GError) app_filter_error = bus_error_to_app_filter_error (local_error,
|
g_autoptr(GError) app_filter_error = NULL;
|
||||||
user_id);
|
|
||||||
|
if (g_error_matches (local_error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS))
|
||||||
|
{
|
||||||
|
/* o.fd.D.GetAll() will return InvalidArgs errors if
|
||||||
|
* accountsservice doesn’t have the com.endlessm.ParentalControls.AppFilter
|
||||||
|
* extension interface installed. */
|
||||||
|
app_filter_error = g_error_new_literal (MCT_APP_FILTER_ERROR,
|
||||||
|
MCT_APP_FILTER_ERROR_DISABLED,
|
||||||
|
_("App filtering is globally disabled"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
app_filter_error = bus_error_to_app_filter_error (local_error,
|
||||||
|
user_id);
|
||||||
|
}
|
||||||
|
|
||||||
g_propagate_error (error, g_steal_pointer (&app_filter_error));
|
g_propagate_error (error, g_steal_pointer (&app_filter_error));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ G_BEGIN_DECLS
|
||||||
* filter for the given user
|
* filter for the given user
|
||||||
* @MCT_APP_FILTER_ERROR_INVALID_DATA: The data stored in the app filter for
|
* @MCT_APP_FILTER_ERROR_INVALID_DATA: The data stored in the app filter for
|
||||||
* a user is inconsistent or invalid
|
* a user is inconsistent or invalid
|
||||||
|
* @MCT_APP_FILTER_ERROR_DISABLED: App filtering is disabled for all users (Since: 0.3.0)
|
||||||
*
|
*
|
||||||
* Errors which can be returned by mct_get_app_filter_async().
|
* Errors which can be returned by mct_get_app_filter_async().
|
||||||
*
|
*
|
||||||
|
@ -45,6 +46,7 @@ typedef enum
|
||||||
MCT_APP_FILTER_ERROR_INVALID_USER,
|
MCT_APP_FILTER_ERROR_INVALID_USER,
|
||||||
MCT_APP_FILTER_ERROR_PERMISSION_DENIED,
|
MCT_APP_FILTER_ERROR_PERMISSION_DENIED,
|
||||||
MCT_APP_FILTER_ERROR_INVALID_DATA,
|
MCT_APP_FILTER_ERROR_INVALID_DATA,
|
||||||
|
MCT_APP_FILTER_ERROR_DISABLED,
|
||||||
} MctAppFilterError;
|
} MctAppFilterError;
|
||||||
|
|
||||||
GQuark mct_app_filter_error_quark (void);
|
GQuark mct_app_filter_error_quark (void);
|
||||||
|
|
|
@ -925,6 +925,63 @@ test_app_filter_bus_get_error_unknown (BusFixture *fixture,
|
||||||
g_assert_null (app_filter);
|
g_assert_null (app_filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Test that mct_get_app_filter() returns an error if the mock D-Bus service
|
||||||
|
* reports an unknown interface, which means that parental controls are not
|
||||||
|
* installed properly.
|
||||||
|
*
|
||||||
|
* The mock D-Bus replies are generated inline. */
|
||||||
|
static void
|
||||||
|
test_app_filter_bus_get_error_disabled (BusFixture *fixture,
|
||||||
|
gconstpointer test_data)
|
||||||
|
{
|
||||||
|
g_autoptr(GAsyncResult) result = NULL;
|
||||||
|
g_autoptr(GError) local_error = NULL;
|
||||||
|
g_autoptr(GDBusMethodInvocation) invocation1 = NULL;
|
||||||
|
g_autoptr(GDBusMethodInvocation) invocation2 = NULL;
|
||||||
|
g_autofree gchar *object_path = NULL;
|
||||||
|
g_autoptr(MctAppFilter) app_filter = NULL;
|
||||||
|
|
||||||
|
mct_get_app_filter_async (gt_dbus_queue_get_client_connection (fixture->queue),
|
||||||
|
fixture->valid_uid,
|
||||||
|
MCT_GET_APP_FILTER_FLAGS_NONE, NULL,
|
||||||
|
async_result_cb, &result);
|
||||||
|
|
||||||
|
/* Handle the FindUserById() call. */
|
||||||
|
gint64 user_id;
|
||||||
|
invocation1 =
|
||||||
|
gt_dbus_queue_assert_pop_message (fixture->queue,
|
||||||
|
"/org/freedesktop/Accounts",
|
||||||
|
"org.freedesktop.Accounts",
|
||||||
|
"FindUserById", "(x)", &user_id);
|
||||||
|
g_assert_cmpint (user_id, ==, fixture->valid_uid);
|
||||||
|
|
||||||
|
object_path = g_strdup_printf ("/org/freedesktop/Accounts/User%u", (uid_t) user_id);
|
||||||
|
g_dbus_method_invocation_return_value (invocation1, g_variant_new ("(o)", object_path));
|
||||||
|
|
||||||
|
/* Handle the Properties.GetAll() call and return an InvalidArgs error. */
|
||||||
|
const gchar *property_interface;
|
||||||
|
invocation2 =
|
||||||
|
gt_dbus_queue_assert_pop_message (fixture->queue,
|
||||||
|
object_path,
|
||||||
|
"org.freedesktop.DBus.Properties",
|
||||||
|
"GetAll", "(&s)", &property_interface);
|
||||||
|
g_assert_cmpstr (property_interface, ==, "com.endlessm.ParentalControls.AppFilter");
|
||||||
|
|
||||||
|
g_dbus_method_invocation_return_dbus_error (invocation2,
|
||||||
|
"org.freedesktop.DBus.Error.InvalidArgs",
|
||||||
|
"No such interface "
|
||||||
|
"“com.endlessm.ParentalControls.AppFilter”");
|
||||||
|
|
||||||
|
/* Get the get_app_filter() result. */
|
||||||
|
while (result == NULL)
|
||||||
|
g_main_context_iteration (NULL, TRUE);
|
||||||
|
app_filter = mct_get_app_filter_finish (result, &local_error);
|
||||||
|
|
||||||
|
g_assert_error (local_error,
|
||||||
|
MCT_APP_FILTER_ERROR, MCT_APP_FILTER_ERROR_DISABLED);
|
||||||
|
g_assert_null (app_filter);
|
||||||
|
}
|
||||||
|
|
||||||
/* Generic mock accountsservice implementation which handles properties being
|
/* Generic mock accountsservice implementation which handles properties being
|
||||||
* set on a mock User object, and compares their values to the given
|
* set on a mock User object, and compares their values to the given
|
||||||
* `expected_*` ones.
|
* `expected_*` ones.
|
||||||
|
@ -1315,6 +1372,8 @@ main (int argc,
|
||||||
bus_set_up, test_app_filter_bus_get_error_permission_denied_missing, bus_tear_down);
|
bus_set_up, test_app_filter_bus_get_error_permission_denied_missing, bus_tear_down);
|
||||||
g_test_add ("/app-filter/bus/get/error/unknown", BusFixture, NULL,
|
g_test_add ("/app-filter/bus/get/error/unknown", BusFixture, NULL,
|
||||||
bus_set_up, test_app_filter_bus_get_error_unknown, bus_tear_down);
|
bus_set_up, test_app_filter_bus_get_error_unknown, bus_tear_down);
|
||||||
|
g_test_add ("/app-filter/bus/get/error/disabled", BusFixture, NULL,
|
||||||
|
bus_set_up, test_app_filter_bus_get_error_disabled, bus_tear_down);
|
||||||
|
|
||||||
g_test_add ("/app-filter/bus/set/async", BusFixture, GUINT_TO_POINTER (TRUE),
|
g_test_add ("/app-filter/bus/set/async", BusFixture, GUINT_TO_POINTER (TRUE),
|
||||||
bus_set_up, test_app_filter_bus_set, bus_tear_down);
|
bus_set_up, test_app_filter_bus_set, bus_tear_down);
|
||||||
|
|
Loading…
Reference in New Issue