Law's Mach V Line Items
Last updated September 21, 2001

Summary

Line Item SWAG Description
B.5 24 days Improve Helper Application Management
  • Properly reflect registered helper apps
  • Automatically import settings from 4.x or OS where appropriate
  • Reflect user decisions from download dialog
  • Fix bugs
G.1 4 days Improve the "Plug-in Finder" Experience
  • Need to make it easier to find and install plug-ins when needed. Need help probably from Netscape.com side.
G.2 5 days Polish Reveal Location Functionality
  • Improve wording ("Show File Location" for instance).
  • Highlight downloaded file in File Manager
G.3 10 days Polish Unknown Content Type Dialog/Experience
  • Need to make it easier for users to understand how to open files with helper apps, set default handlers, not be asked about how to handle a file repeatedly, and change handling preferences.
  • Should have the ability to change handling prefs such as "always ask me" on an individual mime type basis in helper apps pref panel.
  • Need reworked spec., already much improved in 6.1.
G.4 2 days Better Windows Integration
  • I.e. default save directory for downloaded files should be "My Documents" on Windows.
  • Should remember place document was last saved and open file picker to that directory on subsequent downloads.
G.5 3 days Enable Users to Automatically Launch Executables
  • Should incorporate a warning dialog into the process either as a separate dialog after selecting "Launch," or by incorporating warning text into the existing dialog.
Printing Line Items
A.1 15 days Print Preview (1 of 2, BE and FE)
  • Print Preview Option in File Menu.
  • Functionality that includes:
    • Access from Preview screen to Print and Page Setup.
    • Page Advance - back and forth, single page and beginning/end.
A.2 5 days Page Setup (BE and FE)
  • Page Setup Option in File Menu.
  • Functionality that includes:
    • Customizable Header/Footer
    • Page Numbering
    • Ability to specify Margin settings (tbd - should contents reflow when margins are changed or not?)
    • Page orientation (portrait/landscape)
    • Frame page choices:
      • Print as laid out on screen
      • print only selected frame
      • print all frames individually
A.3 2 days Fit to Page Print Option (BE and FE)
  • Ability to force a web page to fit on a specified number of printed pages (and preview this)
  • Ability to force oversize pages (such as tables) to not have content cut off/printed on separate page (by default)
A.4 5 days Print Preview (2 of 2, BE and FE)
  • Ability to zoom in/zoom out in Print Preview mode
  • Ability to select zoom %age from a dropdown (see IE)
  • Ability to choose frame page printing options (see A.2) from Print Preview Screen (new in IE 6)

Improve Helper Application Management

Detailed Description

This set of features relate to the "Helper Applications" preference panel.

The "features" listed under this line item can be categorized as follows:

Re: Making it work the way it is supposed to

This is bug fixing and not addressed by this plan.

Re: Automatically import settings from 4.x:

The only place this can happen is when migrating a 4.x profile, or, optionally when creating a new profile. It can apply in the latter case because the Communicator settings are actually stored on a per-machine (or per-Windows-user) basis so we could extract that information for every new profile, not just ones explicitly "copied" from a specific Communicator profile.

Regardless, this is a Profile Manager feature and will not be addressed by this plan.

Re: Helper Applications Pref Panel feature(s)

The current implementation of this panel is based on the mimetypes.rdf file, which contains only browser-specific helper application entries. Currently, this information is manipulated as a generic RDF datasource, by code in 3 places:

To merge the OS-defined settings, we need to create a new RDF data source that encapsulates the OS settings (requires separate implementation for each platform), and another datasource that merges that new one with current mimeTypes.rdf data.

This feature is the only work addressed by this plan (and the detailed Task and Issues lists, below).

Tasks

  1. Implement new RDF data source that reflects OS settings for helper applications. Requires mostly platform-specific code. The plan is to provide this capability on Win32 and Mac platforms only. 15 days

    Broken down into subtasks:

    1. Define new RDF datasource interface and implement shared (platform-independent) portion, along with requisite build-system magic to build alternate implementations for each platform. 5 days
    2. Do Win32 implementation of this interface. 5 days
    3. Do Mac implementation of this interface. 5 days
  2. Implement new RDF data source that will "merge" the OS-settings datasource with the existing mimeTypes.rdf data source. More precisely, modify code that uses the existing "simple" RDF datasource so that it uses a "composite" datasource consisting of the new datasource described above, and, the existing mimeTypes.rdf based datasource. 9 days

    Broken down into subtasks:

    1. Modify .xul and .js code for pref panel to use the composite datasource. 3 days
    2. Modify C++ code in uriloader and uriloader\exthandler to use composite data source. 3 days
    3. Modify .js code in nsHelperAppDialog to use new composite datasource 3 days

Issues

Links

Helper app meta bug dependency tree


Improve the "Plug-in Finder" Experience

Detailed Description

This item pertains to the behavior of the "default plug-in" that gets used for <embed> tags for which no plug-in can be found. Gecko/embedding plans to enhance that default plugin with support that will automatically download and install a number of popular plugins. That will be accomplished by tying into support provided by servers at netscape.com (or somewhere else in aol.com).

That feature will not require any "front end" work aside from the UI that the default-plugin/plugin-finder-plugin provides.

There is one bit of related "front end" work that needs to be done: Tie into that same service when appropriate content types are encountered elsewhere. That is, in contexts aside from use with <embed> or <object> tags. For example, this will apply in cases where the user clicks on a link to a stand-alone Acrobat file.

This triggers display of the "unknown content" dialog (aka "helper app launcher dialog") where we currently offer the option to launch an already installed application, or to save the content locally. We need to add a third option: to find a plug-in that can handle the content.

Choosing that option would then trigger the same thing that happens when such content is encountered within a "plugin" (<embed> tag).

Tasks

  1. Add third option to "helper app launcher" dialog: "Look for Plug-in." 1 day
  2. Add code to nsHelperAppDialog.js to implement that option. This will be done via calling into code shared with, and already in place in, the default plugin. 3 days

Issues

Links


Polish Reveal Location Functionality

Detailed Description

The first sub-item is trivial, of course (provided we can agree on the precise wording). There is a potential problem if the button would grow too wide (thus making the dialog wider).

The second sub-item would appear to be more work, and require independent Mac and Windows implementations (see below under "Issues" for discussion of the situation on Linux). I have taken a glance at the Win32 shell APIs and it seems that selecting a file in a folder is possible. The Mac will likely require a bit less effort because the Finder APIs are better/simpler. However, Mac OS X may require yet another implementation that will be rolled into this subtask.

Tasks

  1. Modify text for button. <1 day
  2. Update Windows implementation of nsILocalFile::Reveal to select the file. 2 days
  3. Likewise for the Mac implementation of that method. 2 days

Issues

Links


Polish Unknown Content Type Dialog/Experience

Detailed Description

I believe we should use this item to encompass a more substantial overhaul of the nsIMIMEService and nsIMIMEInfo implementations.

Currently, we have (at least) 3 sets of code that uses low-level RDF to manipulate the mimeTypes.rdf file that sits behind the "Unknown Content Type Dialog" and the Helper Applications pref panel. It would be better to move that code into the nsIMIMEInfo so that it can be re-used.

Further, Line Item B5, "Improve Helper Application Management" requires us to encapsulate the OS settings for "mime types" in a new RDF data source. That data source replicates much of the function implemented in parts of the URI loader. The URI loader should be modified to take advantage of the new data source.

Given that, the next step is to do the "polish." The main thing that needs to be done is to "fix" the Edit and New Type dialogs so that they are consistent in terms of the fields they display and the way they behave. Each has some flaws, currently (e.g., New Type doesn't let you turn off the "Always ask me", "Edit type" doesn't let you change the mime type). A single dialog can suffice, with some code to deal with the separate "modes."

That would facilitate the generic "make it easier" requirement(s).

We will not address the specific requirement that users be able to change "always ask me" on a per-mimeType basis on the pref panel. That requires some major expenditure of effort to extend the dialog and the benefit seems negligible. There is a prominent Edit button there that opens a dialog with the checkbox on it. When the user is asked, there is a checkbox that enables them to specify "don't ask me any more." I suspect that what prompted this "requirement" was the lack of this capability in Netscape6.0/6.01. If still lacking, that is simply a bug.

Tasks

  1. Extend nsIMIMEInfo with new add/replace methods and encapsulate the current mimeTypes.rdf implementation behind those methods. 4 days
  2. Implement new, combined "Edit"/"New Type" helper app dialogs (.xul and .js) that use the new nsIMIMEInfo methods. 4 days
  3. Modify code that uses old dialogs to use the new, combined dialog. 2 days

Issues

Links


Better Windows Integration

Detailed Description

The second sub-item is already implemented (modulo bugs; I did verify that it is still working OK on Windows in 6.1).

The first sub-item could be implemented in a number of ways. The simplest is probably to detect when the "download directory path" pref is empty and then pick a reasonable default. We could probably pick a reasonable default on Mac and Linux, too, while we're at it.

Tasks

  1. Modify code in "helper app dialog" as described above. 1 day
  2. Modify code in "stream transfer component" as described above. 1 day

Issues

Links


Enable Users to Automatically Launch Executables

Detailed Description

I think it is preferable to pose an extra dialog in this case (rather than add wording to the current dialog that could be too easily missed by the user).

The implementation should be easy enough. Currently, the code checks that the file and disables "Launch" if it is executable. Instead, we'd just wire that button so that it opened another "Are you sure?" dialog whose "Yes" button did the launch.

There is one other situation: clicking on a link to an executable. Currently, that goes straight to the file picker (and then the download progress dialog). If we're going to permit launching applications, we should also permit that to happen "directly" (i.e., download and run from temporary location without prompting the user for a destination). This change would require a tweak to the code that currently bypasses the "unknown content type dialog" and the insertion of similar "verify before launch" logic, as described above, in that dialog (at the point where the user chooses to "open" the content).

Tasks

  1. Implement new "Launch dialog" (basically, a simple prompt). 1 day
  2. Change download progress dialog so that "Launch" opens this new dialog, so that it doesn't automagically make the "Save to Disk" decision for the user, and, 1 day so that it puts up the confirmation dialog before "opening" executable content. 2 days

Issues

Links


Print Preview (1 of 2, BE and FE)

Detailed Description

Adding the "Print Preview" menu choice, by itself, is trivial. The menu choice will be enabled/disabled in parallel with the existing Print... menu choice. It is unclear whether this menu choice will be available only in Navigator or also in Mail/News, though. The assumption here is that we're adding it to Navigator only.

That menu choice, when enabled, will either open a new "Print Preview" window, or, change the current window to "print preview mode." The former appears at this time to be vastly simpler to implement and is the course we plan to take.

The new (or existing window), is put in "print preview mode" by QI'ing the nsIWebBrowser (or some other object?) for the nsIWebBrowserPrint interface and calling that interface's ShowPrintPreview method. That method returns an nsIPrintPreviewNavigation interface, which then provides the methods that advance through pages, etc.

Unfortunately, that's all in theory. nsIWebBrowserPrint doess not currently declare the method ShowPrintPreview. It appears that this was supposed to be fixed per bug 72691 but that bug was closed (perhaps erroneously). So the method needs to be added, and more importantly, implemented. That would seem to be a "BE" (back end) task.

Once the proper interfaces are in place and implemented, then it should be relatively straightforward to implement the new window. We will implement that window using any simplifying assumptions that can materially reduce the work involved, while not materially reducing the value to the user. For example, it may turn out to be necessary to make the Print Preview window "modal" to the browser window from which it is opened. E.g, if it turns out that subsequent navigation on that parent window raises significant stability issues.

Tasks

Issues

Links


Page Setup (BE and FE)

Detailed Description

This feature involves adding a new "Page Setup..." choice to the main menu under File, at the beginning of the section with Print... (and the new Print Preview...). This menu choice, when selected, will open a modal "Page Setup" dialog that will prompt for page printing options:

These options correspond to the various methods and attributes of the nsIPrintOptions interface. The implementation will simply pre-fill the dialog from the current print options, and after the user selects Ok, will set the new option values back into that object (it is a service).

Tasks

  1. Add new "Page Setup..." menu choice to Navigator menu. 1 day
  2. Write new "page setup dialog" xul/js. 4 days

Issues

Links


Fit to Page Print Option (BE and FE)

Detailed Description

One of the difficulties here is deciding how/where to surface this feature in the UI. It seems that there are only 2 reasonable places to do so:

So this plan is restricted to addressing only this incremental feature/add-on to the Print Preview window discussed above. This also means that the work described here cannot be done prior to completion of much of the work described there.

To implement this, the nsIPrintPreviewNavigation interface will need to be enhanced with methods/attributes that can be used to specify how many pages the printed material should span. This plan assumes that method (or methods) are in place.

Tasks

  1. Add "Fit to: N pages" widget to toolbar at top of Print Preview window and write backing code that fills this widget and transfers changes via nsIPrintPreviewNavigation interface. 2 days

Issues

Links


Print Preview (2 of 2, BE and FE)

Detailed Description

re: Zooming in Print Preview...

The following is based on the following presumptions:

This means that implementing this feature will be relatively straightforward.

re: Frame printing options in print preview...

The options are already offered via the nsIPrintSetting interface so this feature should just require front-end work.

Tasks

  1. Add to Print Preview toolbar:

    2 days

  2. Add supporting JavaScript code to the Print Preview window to wire up those widgets to the underlying interfaces/objects. 3 days

Issues

Links