'Browse directories and tracks at the given ``uri``.
``uri`` is a string which represents some directory belonging to a
backend. To get the intial root directories for backends pass
:class:`None` as the URI.
Returns a list of :class:`mopidy.models.Ref` objects for the
directories and tracks at the given ``uri``.
The :class:`~mopidy.models.Ref` objects representing tracks keep the
track\'s original URI. A matching pair of objects can look like this::
Track(uri=\'dummy:/foo.mp3\', name=\'foo\', artists=..., album=...)
Ref.track(uri=\'dummy:/foo.mp3\', name=\'foo\')
The :class:`~mopidy.models.Ref` objects representing directories have
backend specific URIs. These are opaque values, so no one but the
backend that created them should try and derive any meaning from them.
The only valid exception to this is checking the scheme, as it is used
to route browse requests to the correct backend.
For example, the dummy library\'s ``/bar`` directory could be returned
like this::
Ref.directory(uri=\'dummy:directory:/bar\', name=\'bar\')
:param string uri: URI to browse
:rtype: list of :class:`mopidy.models.Ref`
.. versionadded:: 0.18'

def browse(self, uri):

    if (uri is None):
        return self._roots()
    elif (not uri.strip()):
        return []
    validation.check_uri(uri)
    return self._browse(uri)
