[Pkg-telepathy-commits] [telepathy-mission-control-6] 135/280: Remove BypassObservers support

Simon McVittie smcv at debian.org
Thu Mar 27 20:07:15 UTC 2014


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch debian
in repository telepathy-mission-control-6.

commit ec956ef2ef6f2a28b6f475e96a1a61f77a19aa35
Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Mon Nov 4 18:46:22 2013 +0000

    Remove BypassObservers support
    
    It wasn't implemented correctly (see bug #40305) and I wasn't convinced
    by the design (see bug #30043). Let's think about it more before we
    bring it back.
    
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=30043
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=40305
    Reviewed-by: Guillaume Desmottes <guillaume.desmottes at collabora.co.uk>
---
 src/mcd-client-priv.h                        |   2 -
 src/mcd-client.c                             |  17 --
 src/mcd-dispatch-operation.c                 |  41 +---
 src/mcd-dispatcher.c                         |  10 -
 tests/twisted/Makefile.am                    |   1 -
 tests/twisted/dispatcher/bypass-observers.py | 291 ---------------------------
 tests/twisted/mctest.py                      |   9 +-
 7 files changed, 3 insertions(+), 368 deletions(-)

diff --git a/src/mcd-client-priv.h b/src/mcd-client-priv.h
index c00ce13..069d2a6 100644
--- a/src/mcd-client-priv.h
+++ b/src/mcd-client-priv.h
@@ -97,8 +97,6 @@ G_GNUC_INTERNAL const GList *_mcd_client_proxy_get_handler_filters
     (McdClientProxy *self);
 G_GNUC_INTERNAL gboolean _mcd_client_proxy_get_bypass_approval
     (McdClientProxy *self);
-G_GNUC_INTERNAL gboolean _mcd_client_proxy_get_bypass_observers
-    (McdClientProxy *self);
 G_GNUC_INTERNAL gboolean _mcd_client_proxy_get_delay_approvers
     (McdClientProxy *self);
 
diff --git a/src/mcd-client.c b/src/mcd-client.c
index 455cfd7..ec5c504 100644
--- a/src/mcd-client.c
+++ b/src/mcd-client.c
@@ -68,7 +68,6 @@ struct _McdClientProxyPrivate
     gboolean introspect_started;
     gboolean ready;
     gboolean bypass_approval;
-    gboolean bypass_observers;
     gboolean delay_approvers;
     gboolean recover;
 
@@ -400,10 +399,6 @@ parse_client_file (McdClientProxy *client,
         g_key_file_get_boolean (file, TP_IFACE_CLIENT_HANDLER,
                                 "BypassApproval", NULL);
 
-    client->priv->bypass_observers =
-        g_key_file_get_boolean (file, TP_IFACE_CLIENT_HANDLER,
-                                "BypassObservers", NULL);
-
     client->priv->delay_approvers =
         g_key_file_get_boolean (file, TP_IFACE_CLIENT_OBSERVER,
                                 "DelayApprovers", NULL);
@@ -664,10 +659,6 @@ _mcd_client_proxy_handler_get_all_cb (TpProxy *proxy,
     self->priv->bypass_approval = bypass;
     DEBUG ("%s has BypassApproval=%c", bus_name, bypass ? 'T' : 'F');
 
-    bypass = tp_asv_get_boolean (properties, "BypassObservers", NULL);
-    self->priv->bypass_observers = bypass;
-    DEBUG ("%s has BypassObservers=%c", bus_name, bypass ? 'T' : 'F');
-
     /* don't emit handler-capabilities-changed if we're not actually available
      * any more - if that's the case, then we already signalled our loss of
      * any capabilities */
@@ -1369,14 +1360,6 @@ _mcd_client_proxy_get_bypass_approval (McdClientProxy *self)
 }
 
 gboolean
-_mcd_client_proxy_get_bypass_observers (McdClientProxy *self)
-{
-    g_return_val_if_fail (MCD_IS_CLIENT_PROXY (self), FALSE);
-
-    return self->priv->bypass_observers;
-}
-
-gboolean
 _mcd_client_proxy_get_delay_approvers (McdClientProxy *self)
 {
     g_return_val_if_fail (MCD_IS_CLIENT_PROXY (self), FALSE);
diff --git a/src/mcd-dispatch-operation.c b/src/mcd-dispatch-operation.c
index 020d6b8..5299a5b 100644
--- a/src/mcd-dispatch-operation.c
+++ b/src/mcd-dispatch-operation.c
@@ -388,8 +388,6 @@ static void mcd_dispatch_operation_set_channel_handled_by (
     const gchar *well_known_name);
 static gboolean _mcd_dispatch_operation_handlers_can_bypass_approval (
     McdDispatchOperation *self);
-static gboolean _mcd_dispatch_operation_handlers_can_bypass_observers (
-    McdDispatchOperation *self);
 
 static void
 _mcd_dispatch_operation_check_client_locks (McdDispatchOperation *self)
@@ -1828,34 +1826,6 @@ _mcd_dispatch_operation_handlers_can_bypass_approval (
     return FALSE;
 }
 
-/* this is analogous to *_can_bypass_handlers() method above */
-static gboolean
-_mcd_dispatch_operation_handlers_can_bypass_observers (
-    McdDispatchOperation *self)
-{
-    gchar **iter;
-
-    for (iter = self->priv->possible_handlers;
-         iter != NULL && *iter != NULL;
-         iter++)
-    {
-        McdClientProxy *handler = _mcd_client_registry_lookup (
-            self->priv->client_registry, *iter);
-
-        if (handler != NULL)
-        {
-            gboolean bypass = _mcd_client_proxy_get_bypass_observers (
-                handler);
-
-            DEBUG ("%s has BypassObservers=%c", *iter, bypass ? 'T' : 'F');
-            return bypass;
-        }
-    }
-
-    return FALSE;
-}
-
-
 gboolean
 _mcd_dispatch_operation_has_channel (McdDispatchOperation *self,
                                      McdChannel *channel)
@@ -2240,15 +2210,8 @@ _mcd_dispatch_operation_run_clients (McdDispatchOperation *self)
     {
         const GList *mini_plugins;
 
-        if (_mcd_dispatch_operation_handlers_can_bypass_observers (self))
-        {
-            DEBUG ("Bypassing observers");
-        }
-        else
-        {
-            DEBUG ("Running observers");
-            _mcd_dispatch_operation_run_observers (self);
-        }
+        DEBUG ("Running observers");
+        _mcd_dispatch_operation_run_observers (self);
 
         for (mini_plugins = mcp_list_objects ();
              mini_plugins != NULL;
diff --git a/src/mcd-dispatcher.c b/src/mcd-dispatcher.c
index 3184446..8275e5e 100644
--- a/src/mcd-dispatcher.c
+++ b/src/mcd-dispatcher.c
@@ -589,17 +589,7 @@ mcd_dispatcher_client_needs_recovery_cb (McdClientProxy *client,
     for (list = channels; list; list = list->next)
     {
         TpChannel *channel = list->data;
-        const gchar *object_path = tp_proxy_get_object_path (channel);
         GVariant *properties;
-        McdClientProxy *handler;
-
-        /* FIXME: This is not exactly the right behaviour, see fd.o#40305 */
-        handler = _mcd_dispatcher_lookup_handler (self, channel, NULL);
-        if (handler && _mcd_client_proxy_get_bypass_observers (handler))
-        {
-            DEBUG ("skipping unobservable channel %s", object_path);
-            continue;
-        }
 
         properties = tp_channel_dup_immutable_properties (channel);
 
diff --git a/tests/twisted/Makefile.am b/tests/twisted/Makefile.am
index 7aef649..587d6b0 100644
--- a/tests/twisted/Makefile.am
+++ b/tests/twisted/Makefile.am
@@ -30,7 +30,6 @@ TWISTED_BASIC_TESTS = \
 	dispatcher/already-has-channel.py \
 	dispatcher/approver-fails.py \
 	dispatcher/bypass-approval.py \
-	dispatcher/bypass-observers.py \
 	dispatcher/cancel.py \
 	dispatcher/capture-bundle.py \
 	dispatcher/cdo-claim.py \
diff --git a/tests/twisted/dispatcher/bypass-observers.py b/tests/twisted/dispatcher/bypass-observers.py
deleted file mode 100644
index 1aeb318..0000000
--- a/tests/twisted/dispatcher/bypass-observers.py
+++ /dev/null
@@ -1,291 +0,0 @@
-# Copyright (C) 2009-2010 Nokia Corporation
-# Copyright (C) 2009-2010 Collabora Ltd.
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 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
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-# 02110-1301 USA
-
-import dbus
-"""Regression test for dispatching an incoming Text channel with bypassed
-observers.
-"""
-
-import dbus
-import dbus.service
-
-from servicetest import EventPattern, tp_name_prefix, tp_path_prefix, \
-        call_async, sync_dbus, assertEquals, assertLength, assertContains
-from mctest import exec_test, SimulatedConnection, SimulatedClient, \
-        create_fakecm_account, enable_fakecm_account, SimulatedChannel, \
-        expect_client_setup
-import constants as cs
-
-text_fixed_properties = dbus.Dictionary({
-    cs.CHANNEL + '.ChannelType': cs.CHANNEL_TYPE_TEXT,
-    }, signature='sv')
-contact_text_fixed_properties = dbus.Dictionary({
-    cs.CHANNEL + '.TargetHandleType': cs.HT_CONTACT,
-    cs.CHANNEL + '.ChannelType': cs.CHANNEL_TYPE_TEXT,
-    }, signature='sv')
-secret_fixed_properties = dbus.Dictionary({
-    cs.CHANNEL + '.TargetHandleType': cs.HT_CONTACT,
-    cs.CHANNEL + '.ChannelType': cs.CHANNEL_TYPE_TEXT,
-    'com.example.Secrecy.Secret': True,
-    }, signature='sv')
-
-def announce_common(q, bus, empathy, kopete, account, conn, cd_props,
-        secret=False):
-    if secret:
-        jid = 'friar.lawrence'
-    else:
-        jid = 'juliet'
-
-    channel_properties = dbus.Dictionary(contact_text_fixed_properties,
-            signature='sv')
-    channel_properties[cs.CHANNEL + '.TargetID'] = jid
-    channel_properties[cs.CHANNEL + '.TargetHandle'] = \
-            conn.ensure_handle(cs.HT_CONTACT, jid)
-    channel_properties[cs.CHANNEL + '.InitiatorID'] = jid
-    channel_properties[cs.CHANNEL + '.InitiatorHandle'] = \
-            conn.ensure_handle(cs.HT_CONTACT, jid)
-    channel_properties[cs.CHANNEL + '.Requested'] = False
-    channel_properties[cs.CHANNEL + '.Interfaces'] = dbus.Array(signature='s')
-
-    if secret:
-        channel_properties['com.example.Secrecy.Secret'] = True
-
-    chan = SimulatedChannel(conn, channel_properties)
-    chan.announce()
-
-    # A channel dispatch operation is created
-
-    e = q.expect('dbus-signal',
-            path=cs.CD_PATH,
-            interface=cs.CD_IFACE_OP_LIST,
-            signal='NewDispatchOperation')
-
-    cdo_path = e.args[0]
-    cdo_properties = e.args[1]
-
-    assertEquals(cdo_properties[cs.CDO + '.Account'], account.object_path)
-    assertEquals(cdo_properties[cs.CDO + '.Connection'], conn.object_path)
-    assertContains(cs.CDO + '.Interfaces', cdo_properties)
-
-    handlers = cdo_properties[cs.CDO + '.PossibleHandlers'][:]
-
-    if secret:
-        # The handler with BypassApproval is first
-        assertEquals(cs.tp_name_prefix + '.Client.Kopete.Bypasser',
-            handlers[0])
-    else:
-        handlers.sort()
-        assertEquals([cs.tp_name_prefix + '.Client.Empathy',
-            cs.tp_name_prefix + '.Client.Kopete'], handlers)
-
-    assertContains(cs.CD_IFACE_OP_LIST, cd_props.Get(cs.CD, 'Interfaces'))
-
-    assertEquals([(cdo_path, cdo_properties)],
-        cd_props.Get(cs.CD_IFACE_OP_LIST, 'DispatchOperations'))
-
-    cdo = bus.get_object(cs.CD, cdo_path)
-    cdo_iface = dbus.Interface(cdo, cs.CDO)
-
-    # Both Observers are told about the new channel
-
-    if secret:
-        observe_events = []
-    else:
-        e, k = q.expect_many(
-                EventPattern('dbus-method-call',
-                    path=empathy.object_path,
-                    interface=cs.OBSERVER, method='ObserveChannels',
-                    handled=False),
-                EventPattern('dbus-method-call',
-                    path=kopete.object_path,
-                    interface=cs.OBSERVER, method='ObserveChannels',
-                    handled=False),
-                )
-        assertEquals(account.object_path, e.args[0])
-        assertEquals(conn.object_path, e.args[1])
-        assertEquals(cdo_path, e.args[3])
-        assertEquals([], e.args[4])      # no requests satisfied
-        channels = e.args[2]
-        assertLength(1, channels)
-        assertEquals(chan.object_path, channels[0][0])
-        assertEquals(channel_properties, channels[0][1])
-
-        assertEquals(k.args, e.args)
-        observe_events = [e, k]
-
-    return cdo_iface, chan, channel_properties, observe_events
-
-def expect_and_exercise_approval(q, bus, chan, channel_properties,
-        empathy, kopete, cdo_iface, cd_props):
-    # The Approvers are next
-
-    e, k = q.expect_many(
-            EventPattern('dbus-method-call',
-                path=empathy.object_path,
-                interface=cs.APPROVER, method='AddDispatchOperation',
-                handled=False),
-            EventPattern('dbus-method-call',
-                path=kopete.object_path,
-                interface=cs.APPROVER, method='AddDispatchOperation',
-                handled=False),
-            )
-
-    assertEquals([(chan.object_path, channel_properties)], e.args[0])
-    assertEquals(k.args, e.args)
-
-    # Both Approvers indicate that they are ready to proceed
-    q.dbus_return(e.message, signature='')
-    q.dbus_return(k.message, signature='')
-
-    # Both Approvers now have a flashing icon or something, trying to get the
-    # user's attention
-
-    # The user responds to Kopete first
-    call_async(q, cdo_iface, 'HandleWith',
-            cs.tp_name_prefix + '.Client.Kopete')
-
-    # Kopete is asked to handle the channels
-    e = q.expect('dbus-method-call',
-            path=kopete.object_path,
-            interface=cs.HANDLER, method='HandleChannels',
-            handled=False)
-
-    # Kopete accepts the channels
-    q.dbus_return(e.message, signature='')
-
-    q.expect_many(
-            EventPattern('dbus-return', method='HandleWith'),
-            EventPattern('dbus-signal', interface=cs.CDO, signal='Finished'),
-            EventPattern('dbus-signal', interface=cs.CD_IFACE_OP_LIST,
-                signal='DispatchOperationFinished'),
-            )
-
-    # Now there are no more active channel dispatch operations
-    assertEquals([], cd_props.Get(cs.CD_IFACE_OP_LIST, 'DispatchOperations'))
-
-
-def test(q, bus, mc):
-    params = dbus.Dictionary({"account": "someguy at example.com",
-        "password": "secrecy"}, signature='sv')
-    simulated_cm, account = create_fakecm_account(q, bus, mc, params)
-    conn = enable_fakecm_account(q, bus, mc, account, params)
-
-    # Two clients want to observe, approve and handle channels. Additionally,
-    # Kopete recognises a "Secret" flag on certain incoming channels, and
-    # wants to bypass approval and observers for them. Also, Empathy is a
-    # respawnable observer, which wants to get notified of existing channels
-    # if it gets restarted.
-    empathy = SimulatedClient(q, bus, 'Empathy',
-            observe=[text_fixed_properties], approve=[text_fixed_properties],
-            handle=[text_fixed_properties], bypass_approval=False,
-            wants_recovery=True)
-    kopete = SimulatedClient(q, bus, 'Kopete',
-            observe=[contact_text_fixed_properties],
-            approve=[contact_text_fixed_properties],
-            handle=[contact_text_fixed_properties], bypass_approval=False)
-    bypass = SimulatedClient(q, bus, 'Kopete.Bypasser',
-            observe=[], approve=[],
-            handle=[secret_fixed_properties],
-            bypass_approval=True, bypass_observers=True)
-
-    # wait for MC to download the properties
-    expect_client_setup(q, [empathy, kopete, bypass])
-
-    # subscribe to the OperationList interface (MC assumes that until this
-    # property has been retrieved once, nobody cares)
-
-    cd = bus.get_object(cs.CD, cs.CD_PATH)
-    cd_props = dbus.Interface(cd, cs.PROPERTIES_IFACE)
-    assertEquals([], cd_props.Get(cs.CD_IFACE_OP_LIST, 'DispatchOperations'))
-
-    # First, a non-secret channel is created
-
-    cdo_iface, chan, channel_properties, observe_events = announce_common(q,
-            bus, empathy, kopete, account, conn, cd_props, False)
-
-    # Both Observers indicate that they are ready to proceed
-    for e in observe_events:
-        q.dbus_return(e.message, signature='')
-
-    expect_and_exercise_approval(q, bus, chan, channel_properties,
-            empathy, kopete, cdo_iface, cd_props)
-
-    nonsecret_chan = chan
-
-    # Now a channel that bypasses approval and observers comes in.
-    # During this process, we should never be asked to approve or
-    # observe anything.
-
-    approval = [
-            EventPattern('dbus-method-call', method='AddDispatchOperation'),
-            ]
-
-    q.forbid_events(approval)
-
-    cdo_iface, chan, channel_properties, observe_events = announce_common(q,
-            bus, empathy, kopete, account, conn, cd_props, True)
-
-    # Both Observers indicate that they are ready to proceed
-    for e in observe_events:
-        q.dbus_return(e.message, signature='')
-
-    # Kopete's BypassApproval part is asked to handle the channels
-    e = q.expect('dbus-method-call',
-            path=bypass.object_path,
-            interface=cs.HANDLER, method='HandleChannels',
-            handled=False)
-    # Kopete accepts the channels
-    q.dbus_return(e.message, signature='')
-
-    q.unforbid_events(approval)
-
-    # Empathy, the observer, crashes
-    empathy.release_name()
-
-    e = q.expect('dbus-signal',
-            signal='NameOwnerChanged',
-            predicate=(lambda e:
-                e.args[0] == empathy.bus_name and e.args[2] == ''),
-            )
-    empathy_unique_name = e.args[1]
-
-    bus.flush()
-
-    # Empathy gets restarted
-    empathy.reacquire_name()
-
-    e = q.expect('dbus-signal',
-            signal='NameOwnerChanged',
-            predicate=(lambda e:
-                e.args[0] == empathy.bus_name and e.args[1] == ''),
-            )
-    empathy_unique_name = e.args[2]
-
-    # Empathy is told to observe only the non-secret channel
-    e = q.expect('dbus-method-call',
-                path=empathy.object_path,
-                interface=cs.OBSERVER, method='ObserveChannels',
-                handled=False)
-
-    channels = e.args[2]
-    assertLength(1, channels)
-    assertEquals(nonsecret_chan.object_path, channels[0][0])
-
-if __name__ == '__main__':
-    exec_test(test, {})
-
diff --git a/tests/twisted/mctest.py b/tests/twisted/mctest.py
index b093ee8..35ccec9 100644
--- a/tests/twisted/mctest.py
+++ b/tests/twisted/mctest.py
@@ -845,7 +845,7 @@ class SimulatedClient(object):
             observe=[], approve=[], handle=[],
             cap_tokens=[], bypass_approval=False, wants_recovery=False,
             request_notification=True, implement_get_interfaces=True,
-            is_handler=None, bypass_observers=False, delay_approvers=False):
+            is_handler=None, delay_approvers=False):
         self.q = q
         self.bus = bus
         self.bus_name = '.'.join([cs.tp_name_prefix, 'Client', clientname])
@@ -855,7 +855,6 @@ class SimulatedClient(object):
         self.approve = aasv(approve)
         self.handle = aasv(handle)
         self.bypass_approval = bool(bypass_approval)
-        self.bypass_observers = bool(bypass_observers)
         self.delay_approvers = bool(delay_approvers)
         self.wants_recovery = bool(wants_recovery)
         self.request_notification = bool(request_notification)
@@ -971,7 +970,6 @@ class SimulatedClient(object):
         self.q.dbus_return(e.message, {
             'HandlerChannelFilter': self.handle,
             'BypassApproval': self.bypass_approval,
-            'BypassObservers': self.bypass_observers,
             'HandledChannels': self.handled_channels,
             'Capabilities': self.cap_tokens,
             },
@@ -995,11 +993,6 @@ class SimulatedClient(object):
         self.q.dbus_return(e.message, self.bypass_approval, signature='v',
                 bus=self.bus)
 
-    def Get_BypassApproval(self, e):
-        assert self.handle
-        self.q.dbus_return(e.message, self.bypass_observers, signature='v',
-                bus=self.bus)
-
     def Get_Recover(self, e):
         assert self.handle
         self.q.dbus_return(e.message, self.recover, signature='v',

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-telepathy/telepathy-mission-control-6.git



More information about the Pkg-telepathy-commits mailing list