Merge "chat: callOptions -> callOption"
diff --git a/README.md b/README.md
index 891fb3d..68a2e4d 100644
--- a/README.md
+++ b/README.md
@@ -73,6 +73,9 @@
 `users/vanadium.bot@gmail.com/apps/chat/public` -- has been created with
 permissions that allow anybody to mount and glob inside that directory.
 
+TODO(nlacasse): Describe permissions set up once permission settings are
+finalized. (See go/vcl/9767)
+
 When a client joins the chat room, it generates a random string and attempts to
 mount itself in the public [mounttable server][mounttable] under the name
 `users/vanadium.bot@gmail.com/apps/chat/public/<random_string>`.  If that name
diff --git a/clients/shell/src/chat/main.go b/clients/shell/src/chat/main.go
index 02ccde9..dc74897 100644
--- a/clients/shell/src/chat/main.go
+++ b/clients/shell/src/chat/main.go
@@ -22,10 +22,9 @@
 )
 
 var (
-	mounttable = flag.String("mounttable", "/ns.dev.v.io:8101", "Mounttable where channel is mounted.")
-	proxy      = flag.String("proxy", "proxy.dev.v.io:8100", "Proxy to listen on.")
-	// TODO(nlacasse): Allow these to be set by a flag.
-	channelName = "users/vanadium.bot@gmail.com/apps/chat/public"
+	mounttable  = flag.String("mounttable", "/ns.dev.v.io:8101", "Mounttable where channel is mounted.")
+	proxy       = flag.String("proxy", "proxy.dev.v.io:8100", "Proxy to listen on.")
+	channelName = flag.String("channel", "users/vanadium.bot@gmail.com/apps/chat/public", "Channel to join.")
 )
 
 const welcomeText = `***Welcome to Vanadium Chat***
@@ -108,16 +107,20 @@
 		g.Close()
 	}
 
-	cr, err := newChannel(ctx, *mounttable, *proxy, channelName)
+	cr, err := newChannel(ctx, *mounttable, *proxy, *channelName)
 	if err != nil {
 		log.Panicln(err)
 	}
 
-	hw := newHistoryWriter(g.View("history"), cr.UserName())
+	historyView, err := g.View("history")
+	if err != nil {
+		log.Panicln(err)
+	}
+	hw := newHistoryWriter(historyView, cr.UserName())
 	hw.Write([]byte(color.RedString(welcomeText)))
 
 	hw.Write([]byte(fmt.Sprintf("You have joined channel '%s' on mounttable '%s'.\n"+
-		"Your username is '%s'.\n\n", channelName, *mounttable, cr.UserName())))
+		"Your username is '%s'.\n\n", *channelName, *mounttable, cr.UserName())))
 
 	a := &app{
 		cr:       cr,
@@ -139,7 +142,7 @@
 }
 
 func (a *app) quit(g *gocui.Gui, v *gocui.View) error {
-	return gocui.ErrorQuit
+	return gocui.Quit
 }
 
 func (a *app) handleSendMessage(g *gocui.Gui, v *gocui.View) error {
@@ -224,7 +227,10 @@
 // members view. It also caches the members in app.cachedMembers for use in tab
 // autocomplete.
 func (a *app) updateMembers() {
-	membersView := a.g.View("members")
+	membersView, err := a.g.View("members")
+	if err != nil {
+		log.Panicln(err)
+	}
 
 	members, err := a.cr.getMembers()
 	if err != nil {
@@ -280,7 +286,7 @@
 	a.displayIncomingMessages()
 
 	// Start the main UI loop.
-	if err := a.g.MainLoop(); err != nil && err != gocui.ErrorQuit {
+	if err := a.g.MainLoop(); err != nil && err != gocui.Quit {
 		return err
 	}
 
diff --git a/clients/web/js/channel.js b/clients/web/js/channel.js
index 9520b56..ac75f9b 100644
--- a/clients/web/js/channel.js
+++ b/clients/web/js/channel.js
@@ -8,6 +8,7 @@
 var EventEmitter = require('events').EventEmitter;
 var inherits = require('inherits');
 var path = require('path');
+var url = require('url');
 
 var access = require('vanadium/src/gen-vdl/v.io/v23/security/access');
 var naming = require('vanadium').naming;
@@ -15,8 +16,8 @@
 var ServiceVdl = require('./chat/vdl');
 var util = require('./util');
 
-// TODO(nlacasse): Make this configurable.
-var CHANNEL_NAME = 'users/vanadium.bot@gmail.com/apps/chat/public';
+// Default channel name. Override by setting "channel" query param in url.
+var DEFAULT_CHANNNEL = 'users/vanadium.bot@gmail.com/apps/chat/public';
 
 // Member is a member of the channel.
 function Member(blessings, path) {
@@ -42,7 +43,8 @@
 function Channel(rt) {
   EventEmitter.call(this);
 
-  this.channelName_ = CHANNEL_NAME;
+  var u = url.parse(window.location.href, true);
+  this.channelName_ = u.query.channel || DEFAULT_CHANNNEL;
 
   this.accountName_ = rt.accountName;
   this.namespace_ = rt.namespace();