chromium/chrome/test/data/extensions/api_test/activity_log_private/README

This directory contains tests for chrome extension activity logging.

The tests use two chrome extensions:
  -test  : sends messages to the friend extension and listens for activity
           logged by the friend extension. Checks the activity has been logged
           correctly.
  -friend: receives messages from the extension and runs a function based on
           the contents of the message.


Adding a new test:

  In friend/reply.js:
    (1) Add a function to call the chrome api calls you want to test. If you
        need to use window.open please consider adding your code to
        executeApiCallsOnTabUpdated or executeDOMChangesOnTabUpdated. Every
        extra window.open call will slow down the tests by 3s and may cause
        timeouts.
    (2) Add the name of the new function to the function map (fnMap).

    IMPORTANT NOTES for adding tests:
      - The function should clean up any changes it made (e.g. listeners
        it added) before finishing. If they are not cleaned up then unexpected
        behavior can happen in test cases that run after this function.
      - Every window.open call can add 3 secs to the test run for debug builds.
        Making lots of window.open calls will therefore cause the tests to
        timeout. If your test needs to use window.open please consider adding
        it to one of the following existing functions:
          - executeApiCallsOnTabUpdated
          - executeDOMChangesOnTabUpdated

  In friend/options.html:
    (1) Add a button to allow the new function to be called in manual mode.

  You may need also to modify the manifest.json and other files in the
  friend extension directory.

  In test/test.js:
    (1) Add the test to the testcase array.

        You will need to define the function that sends a message to the
        friend extension and define the expected activity logging. Example:

        testCases.push({
          func: function triggerMyFunctionCall() {
             chrome.runtime.sendMessage(FRIEND_EXTENSION_ID,
                                        'my_function_call_id',
                                        function response() { });
          },
          expected_activity: ['api.call1', 'api.call2', 'api.call3']
        });

        where 'my_function_call_id' is the key you added to the fn_map in
        reply.js.


Running a testcase in Incognito mode:
  
  To check logging when run in incognito mode, add the following to the
  testcase:
      
      is_incognito: true

  This will automatically cause all new tabs to be opened in incognito mode and
  check the url information has been correctly cleaned.  


Configuring a testcase for a particular OS:  
  
  If you need to disable a test for a particular OS then you can do this by
  adding the disabled field to the test case. For example:
       
       disabled:  {win: true, mac: true}

  If you need to configure different expected activity for a particular OS, you
  can override the logging. E.g.:

       expected_activity_win: ['api.call1', 'api.call2', 'api.call3']
       expected_activity_mac: ['api.call1', 'api.call2', 'api.call3']
       
  See the chrome.runtime.getPlatformInfo documentation for details of which OS
  names to use.


Running the tests:

  > out/Debug/browser_tests --gtest_filter=ActivityLogApiTest.TriggerEvent


Running in manual mode:

  (1) Start chrome with out/Debug/chrome
  (2) Navigate to chrome://extensions
  (3) Install the friend and test extensions from your chrome src folder
  (4) Click on the "options" link under the friend extension
  (5) You should see the options page the buttons to run the functions manually